NUnitを使用して統合テストを実行します。これらのテストは非常に時間がかかります。多くの場合、障害を検出する唯一の方法はタイムアウトです。NUnitを最初の失敗時にテストを実行する方法
単一の障害が検出されるとすぐにテストの実行を停止したいと思います。
これを行う方法はありますか?
NUnitを使用して統合テストを実行します。これらのテストは非常に時間がかかります。多くの場合、障害を検出する唯一の方法はタイムアウトです。NUnitを最初の失敗時にテストを実行する方法
単一の障害が検出されるとすぐにテストの実行を停止したいと思います。
これを行う方法はありますか?
これはおそらく理想的な解決策ではありませんが、テストが失敗した場合は残りのテストを無視してください。
[TestFixture]
public class MyTests
{
[Test]
public void Test1()
{
Ascertain(() => Assert.AreEqual(0, 1));
}
[Test]
public void Test2()
{
Ascertain(() => Assert.AreEqual(1, 1));
}
private static void Ascertain(Action condition)
{
try
{
condition.Invoke();
}
catch (AssertionException ex)
{
Thread.CurrentThread.Abort();
}
}
}
あなたが潜在的にそれに装飾されたこの属性で基本クラスを作成して確かめることでメソッドを保護し、そこからすべてのTestFixtureクラスを派生を持つことができますのでTestFixtureAttributeは、継承可能なので。
唯一の欠点は、既存のすべてのアサーションをリファクタリングする必要があることです。
私はNUnit 3を使用しています。次のコードは私のために働きます。
public class SomeTests {
private bool stop;
[SetUp]
public void SetUp()
{
if (stop)
{
Assert.Inconclusive("Previous test failed");
}
}
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
stop = true;
}
}
}
また、これを抽象クラスにして派生させることもできます。
私はこれがテストランナー特有の習慣だと思うので、どのようにテストを実行しますか? NUnit-console、msbuild NUnitタスク、他のランナー? – sll