2013-04-08 84 views
13

我們正在運行夜間構建,最後運行我們的所有UnitTest使用MsTest框架。如何停止MsTest在首次失敗時測試執行?

我們必須有100%的合格率,所以如果一個失敗了,沒有意義的運行其他人;因此我們希望在第一次失敗的測試中停止執行。

反正我們可以做到嗎?

+0

我有同樣的問題,任何人? – Zambonilli 2013-06-26 19:04:02

回答

0

你確定你想扔掉測試結果嗎?

說別人有糟糕的一天,並將多個錯誤A,B和C引入您的代碼中。你可能只會在週一發現A,所以你解決了這個問題,直到星期二你才知道問題B,然後到星期三你才解決C.但是,由於您錯過了半個星期的測試覆蓋範圍,因此週一發佈的錯誤直到推出後幾天才被發現,而且它更昂貴並且需要更長的時間才能修復它們。

如果在失敗後繼續運行測試並不花費太多,那麼這些信息是否有用?


也就是說,在測試庫中一起修復修復並不會那麼困難。有測試失敗的所有可能的codepaths設置一個靜態變量StopAssert.Failed = true;(可能通過包裝調用Assert接球AssertFailedExceptions。然後,只需添加[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 2016-02-19 18:06:48

相關問題