Ваш вопрос, кажется, два сложенный мне. На один был вы хотели бы сравнить две рамки испытаний, с другой стороны, вы хотели бы реализовать тесты легко, имеют естественные утверждения, и т.д. ...
Итак, во-первых, JUnit играет кетчуп с TestNG с точки зрения функциональности, они преодолели разрыв примерно то, что с v4, но не достаточно хорошо, на мой взгляд. Такие вещи, как аннотация и dataproviders все еще намного лучше в TestNG. Кроме того, они являются более гибкими в плане выполнения теста, так как TestNG имеет тестовую зависимость, группировка и упорядочение.
JUnit все еще требует определенного до / после методы статической, что ограничивает то, что вы можете сделать до хода испытаний, TestNG никогда не имеет эту проблемы.
ТВН, в основном, различие между этими двумя рамками не значит, если ваше сосредоточив внимание на тестировании интеграции / автоматизации. JUnit из моего опыта построен с нуля для модульного тестирования и в настоящее время подталкивают к более высоким уровням тестирования, что ИМО делает неправильный инструмент для работы. TestNG делает хорошо на модульном тестировании и благодаря своей надежной dataproviding и большим возможностям выполнения тестов, работает даже лучше интеграции / автоматизации испытательного уровня.
Теперь для того, что я считаю , это отдельный вопрос, как писать хорошо структурированную, читаемую и обслуживаемую тесты. Большая часть этого я уверен , что вы знаете, но такие вещи , как Factory Pattern , команда и PageObjects (если ваши тестирования веб - сайтов) являются жизненно важными, очень важно иметь уровень абстракции между тем, что ваше тестирование (SUT) и то , что фактическое испытание есть (утверждения бизнес - логики). Для того , чтобы иметь намного более хорошие утверждения, вы можете использовать Hamcrest . Используйте наследование Javas / интерфейсы , чтобы уменьшить повторение и обеспечить общность.
Чуть не забыл, а также использовать Test Data Builder шаблон , это в сочетании с DataProvider аннотацию TestNG является очень полезным.