これはちょっと変わった設定です。私はテストをMSTest(Visual Studio Unit Tests)からNUnit 3+に移しています。C#でテストに失敗することなくNUnit AssertionExceptionをキャッチ
私の元のテストフレームワークでは、検証と呼ばれるテストユーティリティを追加しましたが、アサーションは行われませんでしたが、例外は抑制/無視されました。
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);
}
これらのテストは、私はNUnitのに移動するとAssertFailedExceptionが
を投げたにもかかわらず、合格両方、それはそうですこの問題を回避する方法(Warn、MultipleAssert)。最終的には、これらの改善を利用するための新しいテストを構築します。しかし、その間に、私は既存のテストに対していくつかの下位互換性を提供する必要があります。
私の当初の計画では、単純にライブラリをスワップアウトし、例外タイプに変更しました:
public static void AreEqual(int expected, int actual) {
try {
Assert.AreEqual(expected, actual);
} catch (AssertionException) {
NumExceptions++;
}
}
をこれは、既存のテストコードに、また実際に確認したクラスの構造への実質的な変更を必要としません。しかし、NUnitアダプタを使用してVisual Studio内からこのようなテストを実行すると、その2番目のテストは期待通りに実行されますが(例外ではありません)、検証ステップで見つかった例外をリストしたテストには失敗します。
もっと広い解決策は、NUnitのおかげで不要になったので、単純にVerifyクラスを削除することです。しかしそれが起こるまで、Verifyクラス内のAssertionsがNUnitによって "格納"されず、テストに失敗するように、Verify内でNUnit APIを使用する方法がありますか?
このプロセスを経ている間、それは私に起こりました。私はそれを行う "より良い"方法があるかもしれないと思っていた。ありがとう! –