Dot-Net

為什麼 ClassInitialize 修飾的方法會使我的所有測試都失敗?

  • May 24, 2017

我從 MSDN 了解到,這ClassInitialize是標記一種方法,該方法將在所有測試執行之前為所有測試執行一次設置程式碼。當我在下面的節略夾具中包含這樣的方法時,所有測試都失敗了。一旦我將其註釋掉,它們就會再次通過。

[TestClass]
public class AuthenticationTests
{
   [ClassInitialize]
   public void SetupAuth()
   {
       var x = 0;
   }

   [TestMethod]
   public void TestRegisterMemberInit()
   {
       Assert.IsTrue(true);
   }
}

[ClassInitialize]裝飾方法應該是靜態的,並且只採用一個類型的參數TestContext

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
   var x = 0;
}

事實上,如果我將您的程式碼複製粘貼到一個乾淨的 VS 項目中,測試執行程序會在錯誤消息中準確解釋這一點:

方法 UnitTestProject1.AuthenticationTests.SetupAuth 的簽名錯誤。該方法必須是靜態的、公共的、不返回值並且應該採用 TestContext 類型的單個參數。

標有 的方法[ClassInitialize]

  1. 僅適用於測試類的一種方法。
  2. 該類必須是密封的,即不能繼承。
  3. 該方法必須是公共靜態的。
  4. 該方法必須傳遞一個TestContext參數。
  5. 該方法不返回值。

引用自:https://stackoverflow.com/questions/11297646