NUnit 3(3.8.1)の拡張機能を作成しようとしていますが、失敗した場合には失敗します(Debug.Assert(...)
)それは失敗したアサーションダイアログを表示するためです)。失敗したDebug.AssertでNUnit 3の拡張機能をテストする
NUnit 2アドインでは、すべてのデバッグトレースリスナーの登録を解除し、例外をスローするだけの方法で追加することができました(例:here)。しかし、これはもはやNUnit 3では動作しません。
エクステンションを正常に展開することができ、そのコードが実行されています。
[Extension(Description = "Failed Assertions Tracker", EngineVersion = "3.4")]
public class TrackerEventListener : ITestEventListener
{
public void OnTestEvent(string report)
{
Console.WriteLine(report); // prints -> so I know this method is being called
Debug.Listeners.Clear();
Debug.Listeners.Add(new UnitTestTraceListener());
}
}
しかし、私のユニットテストは、残念ながらまだDefaultTraceListener
がインストールされていることを私に示しています。
[Test]
public void FailingAssertionShouldNotHang()
{
foreach (object listener in Debug.Listeners)
{
Console.WriteLine(listener.GetType().FullName);
}
Debug.Fail("I'm sorry. I've failed.");
}
したがって、テストでは単に失敗するのではなくダイアログが表示されます。
私は間違っていますか?実際のテストが別のコンテキスト(異なるAppDomain、process、?)で実行されるため、静的Listeners
コレクションの呼び出しが無効であると思われます。しかし、これが当てはまる場合、どうすれば私の問題を解決することができますか?
[このコメント](https://stackoverflow.com/questions/2662041/can-i-configure-nunit-so-that-debug-fail-doesnt-show-a-message-boxかもしれませ-when-i-run-m/2798663#comment61962711_3184631)助けてください –
@AluanHaddad:私はすべてのテストフィクスチャに自分自身を繰り返したくありません。したがって、私はロジックを拡張機能として記述したいと思います。 – Dejan
@AluanHaddad:申し訳ありませんが、私はこれをあまりにも速く読みました。 SetUpFixtures(https://github.com/nunit/docs/wiki/SetUpFixture-Attribute)を使用すると、テストされたアセンブリにつき1回だけ論理を持つことができます。それは十分に公正な回避策かもしれません。 – Dejan