单元测试由MEF导入值的类

时间:2010-09-07 17:45:23

标签: silverlight unit-testing mef

我有一个名为“ViewFactory”的类,这个类应该提供正确的视图

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

班级看起来像这样......

  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;
        }
    }
}

我想要的是测试我的方法,但不知道怎么做,因为视图列表是在运行时组成的......

我想测试是否获得有效名称的视图 和 如果名字无效,我也想测试是否为null

什么是正确的方法?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;