2013-04-08 11 views
13

私たちは、最終的にMsTestフレームワークを使用してUnitTestのすべてを実行する夜間ビルドを実行しています。最初の失敗時にMsTestテストの実行を停止する方法はありますか?

合格率が100%である必要があります.1つでも失敗した場合、他のものを実行するポイントはありません。したがって、最初に失敗したテストで実行を停止したいと考えています。

私たちはそれを達成できますか?

+0

私がいます同じ問題です誰ですか? – Zambonilli

答えて

0

本当にテスト結果を捨てたいですか?

あなたのコードに複数のバグA、B、Cが導入されています。あなたは月曜日にAについてしか知りませんので、それを修正し、火曜日まで問題Bについて知りません。その後、水曜日までCを修正しません。しかし、テストカバレッジが半減していたため、月曜日に導入されたバグは、導入されてから数日後には発見されず、高価で、修正に時間がかかります。

障害発生後にテストを継続して実行するにはコストがかかりませんが、その情報は有用ではありませんか?


つまり、テストライブラリの修正を一緒にハッキングすることはそれほど難しくありません。おそらくAssertへの呼び出しをラップし、AssertFailedExceptionsを引くことにより、(テストの失敗のすべての可能なコードパスが静的変数StopAssert.Failed = true;を設定しました。それからちょうど失敗した後、各テストを停止するには、各テストクラスに[TestInitialize()]メソッドを追加!

public class StopAssert 
{ 
    public static bool Failed { get; private set; } 

    public static void AreEqual<T>(T expected, T actual) 
    { 
     try 
     { 
      Assert.AreEqual(expected, actual); 
     } 
     catch 
     { 
      Failed = true; 
      throw; 
     } 
    } 

    // ...skipping lots of methods. I don't think inheritance can make this easy, but reflection might? 

    public static void IsFalse(bool condition) 
    { 
     try 
     { 
      Assert.IsFalse(condition); 
     } 
     catch 
     { 
      Failed = true; 
      throw; 
     } 
    } 
} 


[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize()] 
    public void Initialize() 
    { 
     StopAssert.IsFalse(StopAssert.Failed); 
    } 

    [TestMethod] 
    public void TestMethodPasses() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodFails() 
    { 
     StopAssert.AreEqual(0, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodPasses2() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 
} 

[TestClass] 
public class UnitTest2 
{ 
    [TestInitialize()] 
    public void Initialize() 
    { 
     StopAssert.IsFalse(StopAssert.Failed); 
    } 

    [TestMethod] 
    public void TestMethodPasses() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodFails() 
    { 
     StopAssert.AreEqual(0, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodPasses2() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 
} 
+0

誰でも設定を変更する方法がありますか?私たちには変更が必要なコードがたくさんあります: – Steve

関連する問題