JUnit - Использование неверного утверждения - PullRequest
1 голос
/ 10 сентября 2009

Я цитирую это сообщение из записи exubero . Я думаю, что эта запись принесет пользу всем, кто проводит модульное тестирование:

Существует большое количество различных методов, начинающихся с assert, определенных в классе Assert Junit. Каждый из этих методов имеет несколько разные аргументы и семантику в отношении того, что они утверждают.

Ниже показаны некоторые нерегулярные использования assertTrue:

assertTrue("Objects must be the same", expected == actual);
assertTrue("Objects must be equal", expected.equals(actual));
assertTrue("Object must be null", actual == null);
assertTrue("Object must not be null", actual != null);

Некоторые эксперты по модульному тестированию указали, что вышеприведенный код лучше написать как:

assertSame("Objects must be the same", expected, actual);
assertEquals("Objects must be equal", expected, actual);
assertNull("Object must be null", actual);
assertNotNull("Object must not be null", actual);

Одним из преимуществ использования соответствующей функции assertXXX () будет повышение читаемости модульного теста. Может кто-нибудь указать, какие еще преимущества использования соответствующего assertXXX ()?

Ответы [ 2 ]

8 голосов
/ 10 сентября 2009

Я не Java-разработчик и не знаю, что выводит JUnit при сбое подтверждения. Многие модули модульного тестирования, которые я использовал, выводят более подробную информацию об ошибках при использовании чего-то вроде assertEquals.

Позвольте мне показать вам пример того, о чем я говорю:

assertTrue("Objects must be equal", "One" == "Two");
assertEquals("Objects must be equal", "One", "Two");

В первом случае вы можете получить сообщение об ошибке, например:

Ошибка: ожидаемый фактический факт был ложным.

Выход для второго случая:

Ошибка: фактическим было «Один», «Два».

Как видите, второй случай дает более значимую информацию.

0 голосов
/ 10 сентября 2009

В дополнение к тому, что @Vadim упомянул выше, использование правильного assert может защитить от ошибок, созданных cut-copy-paste из тестов.

Как пример

assertTrue("Objects must not be the same", expected != actual);

Затем копируется и изменяется на

assertTrue("Objects must not be the same", newobject == actual);

Когда код изменяется, и этот тест не пройден, и комментарий вводит в заблуждение следующего разработчика, чтобы он «исправил» код таким образом, чтобы он внес новую ошибку.

Если код cut-copy-paste-code был примерно таким:

assertFalse("Objects must be the same", newobject == actual);

Несоответствие комментария, утверждения и контрольного примера может быть более заметным.

И да, я видел, как это произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...