NUnit, действительно ли возможно продолжить выполнять тест после того, как Будут Утверждать сбои?

В тесте, который содержит, некоторые утверждают, например:

Assert.AreEqual(1,1);
Assert.AreEqual(2,1);
Assert.AreEqual(2,2);

действительно ли возможно позволить тесту продолжать бегать за ним сбои в какой-то момент? В примере первое условие является истинными, вторыми сбоями и тестовыми остановками. Я хотел бы оценить также следующее условие.

33
задан ccalboni 14 May 2010 в 14:06
поделиться

5 ответов

В случае сбоя утверждения выдают исключение NUnit.Framework.AssertionException. Вы можете поймать это исключение во втором утверждении, оценить третье утверждение, а затем повторно выбросить исключение.

Я бы не рекомендовал это по причинам, указанным Эдом Вудкоком и Карлом Манастером.

2
ответ дан 27 November 2019 в 18:09
поделиться

Вы можете немного схитрить и на самом деле не потерпеть неудачу в определенный момент, а скорее отметить неудачу, а затем потерпеть неудачу в самом конце, примерно так:

var sbError = new StringBuilder();
if (!SomeCondition()) {
  sbError.AppendLine("SomeCondition failed");
}
if (!SomeOtherCondition()) {
  sbError.AppendLine("SomeOtherCondition failed");
}
Assert.AreEqual(0, sbError.Length, sbError.ToString());

Я бы не рекомендовал это, но если вам нужно сделай это один или два раза, это не должно быть так уж плохо.

3
ответ дан 27 November 2019 в 18:09
поделиться

Нет. В любом случае не стоит делать более одного assert на тест, это уменьшает разделение и усложняет поиск неудачного теста.

Если у вас много кода, который нужно выполнить до Assert, отделите его в функцию [SetUp] или сделайте отдельной процедурой.

2
ответ дан 27 November 2019 в 18:09
поделиться

Вы можете перестроить свой тест так, чтобы завернуть утверждения в блок 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");
  }
2
ответ дан 27 November 2019 в 18:09
поделиться

Нет. Обычно в этой ситуации вы помещаете весь код над утверждениями в метод установки, а затем записываете каждое утверждение в свой собственный тестовый пример.

11
ответ дан 27 November 2019 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: