Утверждать.AreEqual против Assert.Истина / Утверждение.IsFalse

#c# #.net #unit-testing

#c# #.net #модульное тестирование

Вопрос:

При тестировании метода, возвращаемого типа bool.

Должны ли вы иметь:

 expected = true;
Assert.AreEqual(expected, actual);
  

или

 Assert.IsTrue(actual);
  

Я знаю, что они оба приводят к одному и тому же результату, но какую практику лучше использовать?

РЕДАКТИРОВАТЬ: например, если я делаю AreEqual, разве это не то же самое, что делать isTrue для метода, который возвращает строку a la ниже:

 string expected = “true”;
string actual = test.testMethod(data)
bool test;

if expected.equals(actual)
    test = true;
else 
    test = false;
Assert.IsTrue(test);
  

Комментарии:

1.При каких обстоятельствах у вас есть переменная expected , которая, как вы знаете, всегда истинна? То есть, если вы знаете, что это всегда верно, тогда зачем вообще иметь переменную? Просто используйте литерал true .

2. @EricLippert: он пытается соответствовать шаблону, который автоматически генерируется VS, который выглядит точно так же (щелкните правой кнопкой мыши метод, возвращающий bool, затем выберите Создать модульные тесты).

Ответ №1:

Вы должны использовать, только Assert.IsTrue если вы тестируете что-то, что напрямую возвращает логическое значение, которое всегда должно быть true .

Вы не должны массировать данные, чтобы получить логическое значение for IsTrue ; вместо этого вы должны вызвать более подходящий метод в Assert or CollectionAssert .

В вашем отредактированном примере вы должны во что бы то ни стало вызвать Assert.AreEqual вместо этого; это даст вам гораздо более приятное сообщение.

Ответ №2:

Использование Assert.IsTrue более четкое и менее подробное.

Комментарии:

1. И сообщение лучше, когда тест не удался.

2. @Toto: Как Assert.IsTrue failed лучше?

3. я просто тестирую. Я помню, что сообщение было другим, но нет. Извините.