Sind Sie wirklich sicher, dass Sie Testergebnisse wegwerfen wollen?
Sagen Sie jemand hat einen schlechten Tag und führt mehrere Bugs A, B und C in Ihren Code ein. Am Montag erfährst du vielleicht nur etwas über A, also behebst du das, und du weißt bis Dienstag nichts über Ausgabe B, und dann reparierst du C erst am Mittwoch. Aber da Sie die Testabdeckung für eine halbe Woche verpasst haben, werden die am Montag eingeführten Fehler erst Tage nach ihrer Einführung entdeckt und sind teurer und benötigen mehr Zeit, um sie zu beheben.
Wenn es nicht viel kostet, die Tests nach einem Fehler weiter auszuführen, sind diese Informationen nicht hilfreich?
Das heißt, Hacking zusammen eine Lösung in Ihren Testbibliotheken wäre nicht so schwer. Werden alle möglichen codepaths von Testfehlern eine statische Variable StopAssert.Failed = true;
(wahrscheinlich eingestellt durch Anrufe Assert
und fangen AssertFailedExceptions
wickeln. Dann fügen Sie einfach [TestInitialize()]
Methoden zu jeder Testklasse jeden Test nach einem Ausfall zu stoppen!
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);
}
}
ich habe, Das gleiche Problem. Jeder? – Zambonilli