Ответ 1
Вы действительно уверены, что хотите отбросить результаты тестов?
Скажите, что у кого-то плохой день, и вводит в код несколько ошибок A, B и C. Вы можете узнать об A в понедельник, поэтому вы это исправите, и вы не знаете о проблеме B до вторника, а затем вы не исправите C до среды. Но поскольку вам не хватало пробного покрытия в течение половины недели, ошибки, введенные в понедельник, не были обнаружены до тех пор, пока они не были введены, и это дороже и занимает больше времени, чтобы исправить их.
Если вам не нужно много времени проводить тесты после сбоя, разве полезная информация не нужна?
Тем не менее, взломать исправление в ваших тестовых библиотеках не так уж сложно. У всех возможных кодов ошибок теста статическая переменная StopAssert.Failed = true;
(возможно, путем обнуления вызовов на Assert
и catching 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);
}
}