私の会社では、単体テストをたくさん書いています。私たちがしたかったことは単体テストを実行することであり、テストの終わりに成功するか失敗するたびにどこかに書くことができますが、すべてのテストにそのロジックを入れたくありません。NUnit単体テストをtry catch文で囲むことなく記述するにはどうすればよいですか?
私たちが使ってきたtry catchロジックでテストの内容を囲むことなく、テストを書くことができましたか?
私の会社では、単体テストをたくさん書いています。私たちがしたかったことは単体テストを実行することであり、テストの終わりに成功するか失敗するたびにどこかに書くことができますが、すべてのテストにそのロジックを入れたくありません。NUnit単体テストをtry catch文で囲むことなく記述するにはどうすればよいですか?
私たちが使ってきたtry catchロジックでテストの内容を囲むことなく、テストを書くことができましたか?
MSTestにはTestCleanupがあり、テストごとに実行されます。 NUnitでは、使用する属性はTearDown(すべてのテストの後)またはTestFixtureTearDown(すべてのテストが完全に完了した後)です。これは、各テストの終了後に実行されます。
テストが合格するとすぐ実行できるようにするには、各テストの前にfalseに初期化され、テストの最後にtrueに変更されるメンバー変数shouldRunExtraMethodを使用できます。 TearDownでは、この変数値に応じて実行するだけです。
NUnitアサートステートメントには、それぞれのテストでエラーが発生したときにメッセージを出力するオプションがあります。
各テストの最後に何かを書き留めたい場合は、各メソッドの分解で設定することができます。文字列をテスト自体の中に書いておきたいものに設定し、ティアダウン中(各テストの後に起こります)に、あなたが望むものを何でもできます。
例外がスローされてもかなりのティアダウンが発生します。それはあなたが欲しいものをするはずです。
私はあなたがここで何をしようとしているか完全にはわかりません。例外が発生したときにキャッチしてこれを記録できるように、try/catchでラップしていると言っていますか? もしそうなら、もっと良い方法は、おそらくNUnitに出力ファイルを書き込んでこれを使うことです。私はNUnitを約1年間使っていませんが、IIRCの出力は/ outディレクティブを使って好きなファイルにリダイレクトできます。
にという名前があるとすれば、それぞれのテストにカスタムコードを追加するか、コードを取り込む共通の「ランナー」が必要です各テスト)を匿名メソッドとして呼び出し、単一のtry..catch内で実行します。そうすれば、すべてのテストでtry..catchを繰り返す必要がなくなります。
私が質問を誤解している場合はお詫び申し上げます。
私はあなたがこのような何かを推測している:
[Test]
public void FailBecauseOfException()
{
try
{
throw new Exception();
}
catch (Exception e)
{
Assert.Fail(e.Message);
}
}
このため必要はありませんが。テストが例外をスローすると、テストは自動的に失敗します。たとえば、次のテストは失敗として表示されます:
[Test]
public void FailBecauseOfException()
{
throw new Exception();
}
あなたのユニットテストの方法は、あなたが、例外がスローされることを期待するシナリオをカバーする場合、ExpectedException
属性を使用します。その属性の使用については、ここに投稿があります。
あなたが持っている問題は、NUnitのアサートということです*アサートが失敗したときにメソッドがAssertionExceptionをスローします - 。しかし、それは他には何もしません。だから、ユニットテスト以外の何かをチェックして、テストが失敗したかどうかを確認することはできません。
私が考えることのできる唯一の選択肢は、PostSharpなどのツールでAOP(Aspect Oriented Programming)を使用することです。このツールを使用すると、特定のイベントに対処できるアスペクトを作成できます。例えば:
[ExceptionDialog]
[Test]
public void Test()
{
assert.AreEqual(2, 4);
}
上記試験は、例外が発生するので、ExceptionDialogAttributeのコードが実行される:
public class ExceptionDialogAttribute : OnExceptionAspect
{
public override void OnException(MethodExecutionEventArgs eventArgs)
{
string message = eventArgs.Exception.Message;
Window window = Window.GetWindow((DependencyObject) eventArgs.Instance);
MessageBox.Show(window, message, "Exception");
eventArgs.FlowBehavior = FlowBehavior.Continue;
}
}
この態様は、例外が発生するたびに実行されるコードです。メソッドの名前などの情報を取得して、ファイルに記録することができます。
私はPostSharpを使用して以来、長い時間が経っていますので、例をチェックして実験する価値があります。