所以這是一個奇怪的設置。我將我們的測試從MSTest(Visual Studio單元測試)轉移到NUnit 3+。Catch NUnit AssertionException在C#中沒有失敗測試#
在我最初的測試框架中,我添加了一個名爲Verify的測試實用程序,其中創建了斷言,但異常被抑制/忽略,我們只是等到測試結束時斷言是否發生任何故障。
public class Verify {
public static int NumExceptions = 0;
public static void AreEqual(int expected, int actual) {
try {
Assert.AreEqual(expected, actual);
} catch (AssertFailedException) {
NumExceptions++;
}
}
public static void AssertNoFailures() {
Assert.AreEqual(0, _numExceptions);
}
}
因此,對於這個測試代碼可能是:
[TestMethod]
public void VerifyPassesCorrectly() {
int x = 2;
int y = 3;
Verify.AreEqual(3, y);
Verify.AreEqual(2, x);
Verify.AreEqual(5, x + y);
Verify.AssertNoFailures();
}
[TestMethod]
[ExpectedException(typeof(AssertFailedException))]
public void VerifyCountsFailuresCorrectly() {
Verify.AreEqual(3, 2);
Assert.AreEqual(1, Verify.NumExceptions);
}
這兩種測試都通過了,即使一個AssertFailedException被拋出
當我移動到NUnit的,好像有更好如何去做這件事(警告,MultipleAssert)。最終,我們將構建新的測試以利用這些改進。但是,在此期間,我需要爲現有測試提供一些向後兼容性。
我原來的計劃是簡單地換出庫,改變異常類型:
public static void AreEqual(int expected, int actual) {
try {
Assert.AreEqual(expected, actual);
} catch (AssertionException) {
NumExceptions++;
}
}
這需要對現有的測試代碼沒有實質性的變化,也沒有真正的驗證類的結構。但是,當我使用NUnit Adapter在Visual Studio中執行這樣的測試時,第二個測試按預期運行(不例外),但仍未通過測試,列出了在驗證步驟中發現的異常。
更廣泛的解決方案是簡單地移除Verify類,因爲NUnit不再需要它。但在這種情況發生之前,有沒有辦法在Verify中使用NUnit API,以便Verify類中的斷言不會被NUnit「存儲」並用於失敗測試?
好的,在我經歷這個過程時,確實發生了這種情況。我希望可能有一個「更好」的方式來做到這一點。謝謝! –