Почему класс «Assert» имеет так много, казалось бы, избыточных методов? Когда каждый должен использоваться? - PullRequest
6 голосов
/ 22 февраля 2010

Итак, я вижу, что в Assert существуют десятки методов, которые, по-видимому, делают одно и то же.

Assert.IsFalse(     a == b );
Assert.IsTrue(      a != b );
Assert.AreNotEqual( a,   b );

Почему? Это просто чтобы быть более явным? Когда следует использовать различные методы? Есть ли официальный документ о лучших практиках?

Ответы [ 6 ]

8 голосов
/ 22 февраля 2010

Разница между IsFalse и IsTrue заключается в удобочитаемости. AreNotEqual позволяет лучше отображать сообщение об ошибке, если тест не пройден. IsTrue например, просто скажет вам, что ответ должен был быть верным и действительно ложным. AreNotEqual покажет два значения, которые были сравнены в сообщении об ошибке.

8 голосов
/ 22 февраля 2010

Краткий ответ: для удобства чтения.

чуть более длинный ответ:

Ваши тесты также являются кодом, и с точки зрения намерений так же важны, как и код, который вы тестируете. Таким образом, вы хотите, чтобы цель теста была как можно более ясной. Иногда это означает, что вы используете IsFalse, иногда это означает использование IsTrue.

4 голосов
/ 22 февраля 2010

Эти три метода имеют три разные, конкретные цели. Цель тестирования - обеспечить четкую проверку и подтверждение вашего кода. Используя самый понятный и конкретный метод, вы делаете свой тест наименьшим из возможных тестов с максимально конкретным и понятным значением.

Это помогает, потому что добавляет ясности - вы можете, в частности, увидеть, что тест должен делать в более декларативном характере, где использование одного и того же метода для нескольких сценариев тестирования, каждый из которых имеет различное значение, требует большего понимания сам код, а не характер теста.

В этом случае третий (единственный) подходящий для использования. Однако, если бы у вас была такая ситуация, вы бы использовали другую, например:

Assert.IsTrue( myClass.MethodThatReturnsTrue() );

Вам следует использовать метод, который обеспечивает наибольшую ясность в отношении вашей цели - если вы проверяете два значения на равенство, используйте Assert.IsEqual, если вы проверяете логическое значение, чтобы убедиться, что оно ложно, используйте Assert.IsFalse , Это делает сообщения об ошибках значимыми и понятными.

1 голос
/ 22 февраля 2010

Он называется «Свободный интерфейс» ... и, по мнению многих, делает вещи более читабельными.

1 голос
/ 22 февраля 2010

Поскольку вы можете перегрузить == и! =, Вот почему.

1 голос
/ 22 февраля 2010

Это делает ошибки легче читать; используйте тот, который наиболее соответствует вашему коду.

В этом случае используйте # 3.

...