2015-07-05 50 views
0

這與ImportMEF屬性MEF起訂量,他媽的

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等,只是使用一個實際的列表和類似的懶惰。我不認爲你通過嘲笑它而獲得任何東西,並且它最終會成爲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構造函數保存,它將對象和元數據同時作爲參數 –