我想重構一個DLL來使它成爲MEFable。我應該單元測試一個班級是否裝飾有[導出]或[導入]和其他MEF屬性?我應該單元測試一個具有MEF屬性的類嗎?
2
A
回答
1
思考了幾個小時後,再讀一些TDD博客,我應該說,是的,我必須測試我的班級是否具有MEF屬性。
所以我重構上課前我寫那樣的單元測試:
[TestClass]
public class When_SampleClass_mefable
{
[TestMethod]
[TestCategory("LFF.Kabu.Win.Login.ViewModel.SampleClass")]
public void Should_SampleClass_be_marked_with_Export_Attibute()
{
//arrange
var info = (typeof (SampleClass));
//act
var attr = info.GetCustomAttributes(true);
var hasExportAttribute =
attr.Where(x => x.GetType() == typeof (ExportAttribute))
.Where(x => ((ExportAttribute)x).ContractType == typeof(SampleClass))
.Count() > 0;
//assert
Assert.IsTrue(hasExportAttribute, "SampleClass is not marked with Export.");
}
}
對於其他MEF屬性,如[ImportingConstructor]或[PartCreationPolicy]我做了同樣的方式。
3
您的測試應該更多地關注目標而不是機制。創建驗證,比如像「如果我在一個容器中拋出類型的X,Y和Z一起,那麼我就可以從容器拉一個IFoo的接口」的測試中,像這樣:
[Test]
public void Can_get_IFoo_from_container_with_Foo_Bar_Baz()
{
var catalog = new TypeCatalog(typeof(Foo), typeof(Bar), typeof(Baz));
using (var container = new CompositionContainer(catalog))
{
var test = container.GetExportedValue<IFoo>();
}
}
這不再是一個真正的「單元」測試,因爲它涉及多個類和一個IoC容器。我們把它們稱爲「組合測試」。
相關問題
- 1. 一個好的單元測試應該具有什麼樣的屬性?
- 2. 我應該在單元測試中測試視圖的屬性嗎?
- 3. 我應該測試一個ASP MVC項目中的屬性嗎?
- 4. 一個單元應該在rails中測試持久性嗎?
- 5. 具有派生屬性的域類的Grails3單元測試
- 6. 單元測試時,我應該嘲笑所有的依賴嗎?
- 7. 單元測試應該知道NHibernate嗎?
- 8. 我應該單元測試一種主要方法嗎?
- 9. 我應該單元測試我的Behat步驟定義嗎?
- 10. 我應該單元測試我的網格渲染邏輯嗎?
- 11. 我應該測試模型上的屬性嗎?
- 12. 測試一個類是否有屬性?
- 13. Python單元測試類屬性
- 14. 我應該單元測試多個(不同)輸入值到一個函數嗎?
- 15. 測試類可以有屬性嗎?
- 16. 單元測試 - 我應該拆分測試還是進行單個測試?
- 17. 我應該測試一個Javascript插件的私有函數嗎?
- 18. 單元測試和屬性
- 19. 單元測試ios屬性
- 20. 我應該單元測試DefaultModelBinder返回的模型嗎?
- 21. 我應該單元測試不返回值的消息嗎?
- 22. 我應該更改單元測試的命名約定嗎?
- 23. 我應該訪問單元測試的受保護方法嗎?
- 24. 我應該單元測試生成的Java代碼嗎?
- 25. 使用具有屬性的'Pester'(Powershell單元測試框架)
- 26. 單元測試具體類
- 27. 單元測試應該有多徹底?
- 28. 所有的單元測試都應該成功嗎?
- 29. 單元測試應該覆蓋壓力測試嗎?
- 30. 單元測試php應用程序(我應該壓力測試?)
嗯,我想當我做單元測試,然後我只想知道我的班(單位)行爲像預期。我真的不想測試它的組成,所以更多的MEF像預期的那樣工作。對於我的一段代碼,我只需要保證設置屬性。如果在運行時組合不符合我的進口或出口,那麼它不是我班(單位)的問題。你是否同意這一點? – blindmeis 2010-08-12 11:16:48
@blindmeis:我不同意。 MEF屬性是僅與集成相關的元數據。你正在試圖將集成關注點放到單元測試中,這不適合。假設你在所有進口上改變合同類型,但忘記改變被測試的類的輸出。您的單元測試不會檢測到這一點:它將繼續驗證是否存在錯誤的導出屬性。我的測試會檢測到不匹配。 – 2010-08-12 12:41:59
你對你的作文測試是正確的。但我看到我的單元測試就像它是一個單元測試。所以如果我改變合同,我做這種改變的單位將失敗,它應該。但後來我知道這是正確的需求變化,所以我必須改變我的單元測試。我看到你的作文測試是必要的,但比單元測試的水平要高。順便說一句,我只是做了測試,因爲我試圖學習tdd的方式。在那裏我有要求,我的課應該是mefable。 – blindmeis 2010-08-12 16:26:09