[英]Why does the ClassCleanup Attribute need to be on a static method?
背景:我在.NET
中有一堆單元測試,需要設置一些配置數據才能運行。 最初,我使用TestInitialize
和TestCleanup
來設置和拆除每個測試周圍的配置數據; 但是,對於整個測試套件來說,單個設置就足夠了,所以我寧願使用ClassInitialize
和ClassCleanup
。
問題:當我將屬性從TestInitialize
更改為ClassInitialize
並運行測試時,我收到以下錯誤:
MyTestClass.ClassInit有錯誤的簽名。 該方法應標記為靜態。
這個屬性背后的設計原因是什么,要求它的方法是靜態的? 我的所有測試方法都是實例方法,所以我假設我的測試類至少有一個實例是在某處創建的,以便運行它們。 為什么那個實例后來不負責清理呢?
我確實檢查了MSDN ,他們沒有明確提到靜態要求,盡管他們確實有一個很好的例子。
由於MSDN聲明了ClassInitializeAttribute
標識一種方法,該方法包含在測試類中的任何測試運行之前必須使用的代碼,並分配要由測試類使用的資源。 這個類不能被繼承。
我可以考慮的一個例子就是當你的類中有一個靜態字段時,實例的構造函數依賴於它。
class foo
{
static someObject bar;
int foobar;
public foo()
{
this.foobar = foo.bar.SomeMethod()
}
}
這樣,在ClassInitializeAttribute
方法中,您可以為靜態bar
對象賦值,這將影響稍后創建的所有實例。
您可能希望使用ClassInitializeAttribute
另一種情況是分配測試可能使用的全局對象(例如模擬數據庫等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.