2015-07-05 3 views
0

Это класс с Import ред MEF атрибутомMEF Moq-Cking на модульном тестировании

public class MyManager : IMyManager { 
    [ImportMany] 
    public ICollection<Lazy<IContext, IContextMetadata>> Contexts { get; set; } 
    public IContext { get; set; } 

    // Implemented from IMyManager interface 
    public void DoStuff(string name) { 
     this.Context = GetContext(name); 
    } 

    private IContext GetContext(string name) { 
     return Contexts.Where(c => c.Metadata.Name.Equals(name)).Single().Value; 
    } 
} 

Я следовал this answer, чтобы попытаться дразнить его и протестировать его, но я заблудился в фактическом/ожидаюсь значения, так как в моем случае мне нужно утверждать, что MyManager .Context было изменено.

Я полагаю, что у меня есть Mock<IContext>() и использовать его для Assert.Equals, но как я могу рассказать обо всем этом ленивом списке?

ответ

2

Я обычно не беспокоюсь насмешка ICollection или IList и т. Д. И просто использую фактический список и аналогично для Lazy. Я не думаю, что вы что-то получаете, высмеивая это, и это заканчивается довольно тяжелой работой с LINQ. Вот пример:

Mock<IContext> context = new Mock<IContext>(); 
Mock<IContextMetadata> contextMetadata = new Mock<IContextMetadata>(); 
// Do some setup here 
ICollection<Lazy<IContext, IContextMetadata>> contexts = new List<Lazy<IContext, IContextMetadata>>(); 
Lazy<IContext, IContextMetadata> lazyContext = new Lazy<IContext, IContextMetadata>(() => context.Object, contextMetadata.Object); 
contexts.Add(lazyContext) 
+0

Сохранено конструктором Lazy, который принимает как объект, так и метаданные в качестве параметров –

Смежные вопросы