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);
}
}
Aynı sorun.Tamamen – Zambonilli