2012-07-02 26 views
7

我明白,從MSDN,ClassInitialize是標記一個方法,將執行所有測試的設置代碼,一次,所有測試運行之前。當我在下面的縮略夾具中包含這樣一種方法時,所有測試都會失敗。一旦我發表評論,他們再次通過。爲什麼ClassInitialize裝飾方法會使我的所有測試失敗?

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

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

測試失敗說的是什麼? –

+1

Ooops。測試窗口的錯誤文本部分被「最小化」到底部。我真的不知道它甚至在那裏。謝謝喬恩,你讓我看了一眼,最終找到了它。 – ProfK

回答

16

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

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

事實上,如果我是你的代碼複製並粘貼到一個乾淨的VS項目中,TestRunner的確切解釋在錯誤消息中:

方法UnitTestProject1.AuthenticationTests.SetupAuth有錯誤的簽名。該方法必須是static,public,不返回值,並且應該接受一個類型爲TestContext的參數。

+0

謝謝。正如我在對我的問題的評論中解釋的那樣,測試跑步者的這個錯誤是隱藏的,即它顯示的面板太小,我看不到。 – ProfK

2

方法標有[ClassInitialize]

  1. 應用到只有一個測試類的方法。
  2. 該類必須是密封的,即不能繼承。
  3. 該方法必須是公共靜態的。
  4. 該方法必須通過TestContext參數。
  5. 該方法不返回值。
0

在VS2015,未能擁有的TestContext參數使這個最無益的錯誤輸出,當你運行測試(萬一有人正在尋找異常的,就像我是):

引發的異常:Microsoft.VisualStudio.TestPlatform.MSTestFramework.TypeInspectionException中的Microsoft.VisualStudio.TestPlatform.Extensions.VSTestIntegration.dll