В тесте, который содержит, некоторые утверждают, например:
Assert.AreEqual(1,1);
Assert.AreEqual(2,1);
Assert.AreEqual(2,2);
действительно ли возможно позволить тесту продолжать бегать за ним сбои в какой-то момент? В примере первое условие является истинными, вторыми сбоями и тестовыми остановками. Я хотел бы оценить также следующее условие.
В случае сбоя утверждения выдают исключение NUnit.Framework.AssertionException. Вы можете поймать это исключение во втором утверждении, оценить третье утверждение, а затем повторно выбросить исключение.
Я бы не рекомендовал это по причинам, указанным Эдом Вудкоком и Карлом Манастером.
Вы можете немного схитрить и на самом деле не потерпеть неудачу в определенный момент, а скорее отметить неудачу, а затем потерпеть неудачу в самом конце, примерно так:
var sbError = new StringBuilder();
if (!SomeCondition()) {
sbError.AppendLine("SomeCondition failed");
}
if (!SomeOtherCondition()) {
sbError.AppendLine("SomeOtherCondition failed");
}
Assert.AreEqual(0, sbError.Length, sbError.ToString());
Я бы не рекомендовал это, но если вам нужно сделай это один или два раза, это не должно быть так уж плохо.
Нет. В любом случае не стоит делать более одного assert на тест, это уменьшает разделение и усложняет поиск неудачного теста.
Если у вас много кода, который нужно выполнить до Assert, отделите его в функцию [SetUp] или сделайте отдельной процедурой.
Вы можете перестроить свой тест так, чтобы завернуть утверждения в блок try/catch и отслеживать их для последующей проверки. Однако я не рекомендую этого делать. Вам действительно следует использовать отдельные тесты для каждого условия, если вы хотите, чтобы они проверялись независимо.
bool[] assertionSuccesses = new bool[] { false, false, false };
try
{
Assert.AreEqual( 1, 1 );
assertionSuccesses[0] = true;
}
catch (AssertionException) {}
...
if (assertionSuccesses.Any( s => !s ))
{
Assert.Fail("one of the assertions failed");
}
Нет. Обычно в этой ситуации вы помещаете весь код над утверждениями в метод установки, а затем записываете каждое утверждение в свой собственный тестовый пример.