Ваше питання здається мені складеним. З одного боку ви хотіли б порівняти дві тестові рамки, з іншого боку, ви хочете легко впроваджувати тести, мати природні твердження тощо.
Гаразд, по-перше, JUnit грає в доганку з TestNG з точки зору функціональності, вони подолали розрив дещо з v4, але, на мій погляд, недостатньо добре. Такі речі, як примітки та провайдери даних, все ще набагато краще в TestNG. Також вони більш гнучкі в плані виконання тесту, оскільки TestNG має тестову залежність, групування та упорядкування.
JUnit все ще вимагає, щоб певні методи до / після були статичними, що обмежує те, що ви можете зробити до запуску тестів, TestNG ніколи не має цього питання.
TBH, в основному відмінності між двома рамками не означають багато, якщо не зосередитись на тестуванні інтеграції / автоматизації. З мого досвіду JUnit побудований з нуля для тестування одиниць, і тепер його підштовхують до вищих рівнів тестування, що IMO робить його неправильним інструментом для роботи. TestNG добре працює на тестуванні одиниць, а завдяки надійному забезпеченню даних та великим можливостям виконання тесту, працює ще краще на рівні тесту на інтеграцію / автоматизацію.
Тепер для того, що я вважаю, є окремим питанням, як написати добре структуровані, читабельні та реконструйовані тести. Більшу частину цього я впевнений, що ви знаєте, але такі речі, як Factory Pattern , Command Pattern та PageObjects (якщо ваші веб-сайти для тестування) є життєво важливими, дуже важливо мати шар абстракції між тим, що проводить тестування (SUT) та фактичним тестом. є (твердження про логіку бізнесу). Для того, щоб мати набагато приємніші твердження, ви можете використовувати Hamcrest . Використовуйте спадщину / інтерфейси javas, щоб зменшити повторення та забезпечити спільність.
Майже забули, також використовуйте шаблон тестування даних Data Builder , це в поєднанні з анотацією Dataprovider DataNG дуже корисно.