2011-09-21 74 views
1

是否可以在單元測試中使用.NET Introspection功能? 在我們的軟件中,我禁止使用某些操作(比較枚舉值,因爲這是一種特殊的方法)。我記得FxCop(靜態代碼分析)ofers通過Introspection訪問代碼模型。有了它,您可以檢查是否使用了某個功能。我想寫一個單元測試來做同樣的檢查,但我不確定是否爲單元測試提供了內省或類似的東西。 或者你可能有另一個想法,我該怎麼做。在單元測試中使用.NET Introspection/FxCop規則功能

預先感謝您!

+0

是否有某些特定原因需要通過單元測試來完成,而不是簡單地創建自定義FxCop規則? –

回答

0

我不確定關於FxCop,但是您可以使用.NET Reflection(是您內省的意思嗎?)來強制執行某些代碼行爲。

例如,我在某些測試中使用了Reflection,以確保某些「內部」類型不會通過我們的公共服務API暴露。我們只是繞過我們的公共API,並確認沒有暴露的類型(方法參數,屬性等等)在「內部」類型列表中。在包裝第三方組件時,這非常方便,但我們希望確保其庫中的所有類型都不會通過我們的API公開。

如果你不熟悉.NET反射,它爲您提供了一個API,它可以讓你查詢類型像類的方法,方法參數,類屬性等信息......你可以在這裏概述開始:

http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.71).aspx

+0

我有枚舉UserRole {...},我想確保角色比較不是通過is-equal操作,而是通過特殊方法。反射並不能讓我檢查整個源代碼。所以我問一些關於自省的問題;-) – llasarov

2

看來,FxCop的內部不能使用externally(除本身的FxCop或Visual Studio)。

如果要驗證您的體系結構,可以嘗試PostSharp功能Architecture validation或FxCop單選備選Gendarme

0

工具NDepend可以幫助你做到這一點,這要歸功於NDepend.API免責聲明:我的工具

NDepend.API的開發者之一,提出包含內省一個.NET代碼庫所需的所有類型成員的命名空間NDepend.CodeModel

使用NDepend.API,您可以編寫單元測試來檢查廣泛的問題,例如unused methodsNDepend.CodeModel已被設計爲LINQ語法友好的,並且200 of LINQ default code rules是默認提議的(用我們所謂的CQLinq編寫)。