пятница, 2 апреля 2010 г.

И все же TestNG лучше чем JUnit

Сегодня я скачал последнюю версию JUnit, а именно 4.8.1 и еще раз убедился что JUnit не догнал TestNG. Есть 4 причины почему TestNG лучше:

Parameterized tests

DataProviders в TestNG удобнее чем статические методы с аннотацией @Parameters в JUnit. Мне не нравится что JUnit требует чтобы метод, который создает параметры для теста, был статическим, также в TestNG есть возожность задавать параметры в файле.

Concurrent tests

В JUnit аннотация Test не позволяет указать что тест должен высполняться в разных потоках одновременно.

Dependency between tests

В JUnit фича отсутствует.

Документация

Сравните http://junit.sourceforge.net/doc/cookbook/cookbook.htm и http://testng.org/documentation-main.html.

2 комментария:

Эдуард Дударь комментирует...

Dependency between tests
В JUnit фича отсутствует.

Ну вот уж увольте... Это даже не просто smell... Если Вам не хватает этой, страшно сказать, "фичи", но возможно стоит задуматься над тем, как правильно писать тесты...

Sergey Grigoriev комментирует...

Я с вами не согласен. Dependency between tests полезная штука для итеграционных тестов. Представьте себе сценарий: вы тестируете web application, сначала деплоите аппликейшен на аппликейше сервер, потом посылаете запроспры по http и проверяете правильность ответа. Так вот, если не удалось поднять аппликейшен сервер, то тестировать запрос нет смысла.
В этом смысл dependency between tests. Если деплоймент не удался то JUnit будет посылать запросы в никуда и все тесты свалятся, а TestNG поймет что если деплоймент не произошел то нет смысла запускать тесты которые от него зависят и пропустит их. Таким образом, можно сократить время билда и и легче понять в чем ошибка.
JUnit заточен под юнит тесты, а TestNG более универсален и лучше справляется с как с юнит, так и с functional и integration тестами. В идеале все тесты работают независимо друг от друга, но для функциональных тестов (особенно при тестировании всяких workflow) dependency очень полезная вещь. Считайте что dependency - это управление порядком выполнения тестов.
Для тестирования больших и сложных систем TestNG это самое оно :)