2010-09-07 96 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; 
相關問題