2013-04-08 16 views
13

MsTest çerçevesini kullanarak tüm UnitTest'i çalıştırdığımız gece yapımları yapıyoruz.MsTest, ilk hata durumunda nasıl yürütülür?

% 100 geçiş oranına sahip olmalıyız, bu nedenle başarısız olursa, başkalarının çalıştığı bir nokta yoktur; Bu nedenle, ilk başarısız testte yürütmeyi durdurmak isteriz.

Bunu başarabileceğimiz var mı?

+0

Aynı sorun.Tamamen – Zambonilli

cevap

0

Test sonuçlarını atmak istediğinizden gerçekten emin misiniz?

Birinin kötü bir gün geçirdiğini ve kodunuza A, B ve C birden fazla hata eklediğini varsayalım. Sadece Pazartesi günü A'yu öğrenebilirsin, bu yüzden bunu düzelttin ve Salı gününe kadar B meselesini bilmiyorsun ve sonra Çarşamba gününe kadar C'yi tamir etmiyorsun. Ancak, test kapsamını yarım haftadır kaçırdığınızdan beri, pazartesi günü tanıtılan hatalar, piyasaya sürülünce güne kadar keşfedilmiyor ve daha pahalı ve bunları düzeltmek daha uzun sürüyor.

Bir arızadan sonra testleri çalıştırmaya çok fazla mal olmazsa, bu bilgi yararlı olmaz mı?


Bu, test kitaplığınızda bir düzeltmeyi bir araya getirmenin o kadar da zor olmayacağını söyledi. Test başarısızlık tüm olası codepaths bir hatadan sonra her test durdurmak için her test sınıfa statik değişken StopAssert.Failed = true; (Sonra sadece eklemek muhtemelen Assert çağrıları sarma ve AssertFailedExceptions yakalayarak. [TestInitialize()] yöntemleri kurdunuz! yaşıyorum

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

Herkes yapılandırma ayarlarında bunu yapmanın bir yolu var: Değiştirilmesi gereken çok fazla kodumuz var :( – Steve