2010-09-07 60 views
1
进口值的一类

我称之为“的ViewFactory” AA和这个类应该现在提供正确的观点单元测试已经通过MEF

它只有一个方法(将会持续增长),我想写一个单元测试。

类看起来像这样...

public class ViewFactory 
{ 

     [ImportMany(AllowRecomposition=true)] 
    IEnumerable<ExportFactory<DependencyObject, IViewMetaData>> Views { get; set; } 

    public DependencyObject GetViewByName(string name) 
    { 
     DependencyObject view = null; 

     try 
     { 
      view = Views.Where(v => v.Metadata.ViewName == name).FirstOrDefault().CreateExport().Value; 
      return view; 
     } 
     catch (Exception ex) 
     { 

      return view; 
     } 
    } 
} 

什么,我想要的是考验我的方法,但不知道怎么做,因为浏览的名单是由运行时...

我想测试一下,如果我得到一个有效的名称 和 我也想测试一个观点,如果我得到空,如果我有一个无效的名称

会是怎样的正确方法?

回答

2

您会为您的ViewFactory提供适合特定测试的一组ExportFactory<,>值。不同的测试可能会有不同的设置,以允许您测试不同的事情。基本上你是伪装注入的依赖。

+0

感谢您的答复。你能提供一些细节吗?你的意思只是设定清单?或者你的意思是假装或嘲笑组成的一些mef魔术......如果是这样的话?如果你可以提供更多的细节,这将是非常好的... – silverfighter 2010-09-07 22:11:11

+0

@silverfighter关于如何测试MEF类的更多细节,请看这个问题:http://stackoverflow.com/questions/2851140/mef-and-unit-testing -with-nunit – 2010-09-08 01:30:47

+0

@silverfighter:我不会使用MEF自己来设置这个列表......这听起来不像是单元测试应该做的事情。只需在单元测试中手动设置“视图”,就好像您根本不使用MEF。 – 2010-09-08 05:20:46

0

下面的代码(Silverlight的)

var viewFactory = new ViewFactory(); 

// Satisfy the imports manually (No MEF in unit tests!) 
var factories = new List<ExportFactory<DependencyObject, IViewMetaData>>(); 
var tuple = new Tuple<DependencyObject, Action>(new MyObject(),() => { }); 
var metaData = new MyViewMetaData(); 
var factory = new ExportFactory<DependencyObject, IViewMetaData>(() => tuple, metaData); 
factories.Add(factory); 
viewFactory.Views = factories; 
相关问题