簡體   English   中英

為什么ClassCleanup屬性需要在靜態方法上?

[英]Why does the ClassCleanup Attribute need to be on a static method?

背景:我在.NET中有一堆單元測試,需要設置一些配置數據才能運行。 最初,我使用TestInitializeTestCleanup來設置和拆除每個測試周圍的配置數據; 但是,對於整個測試套件來說,單個設置就足夠了,所以我寧願使用ClassInitializeClassCleanup

問題:當我將屬性從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM