Twoje pytanie wydaje mi się dwojakie. Z jednej strony chciałbyś porównać dwa frameworki testowe, z drugiej strony chciałbyś łatwo implementować testy, mieć naturalne asercje itp.
Ok, po pierwsze, JUnit grał w nadrabianie zaległości z TestNG pod względem funkcjonalności, częściowo wypełnili lukę w wersji 4, ale moim zdaniem nie wystarczająco dobrze. Rzeczy takie jak adnotacje i dostawcy danych są nadal znacznie lepsze w TestNG. Są również bardziej elastyczne pod względem wykonywania testów, ponieważ TestNG ma zależności, grupowanie i porządkowanie testów.
JUnit nadal wymaga, aby pewne metody przed / po były statyczne, co ogranicza to, co możesz zrobić przed uruchomieniem testów, TestNG nigdy nie ma tego problemu.
TBH, głównie różnice między tymi dwoma frameworkami nie mają większego znaczenia, chyba że skupisz się na testowaniu integracji / automatyzacji. Z mojego doświadczenia wynika, że JUnit jest tworzony od podstaw do testów jednostkowych i jest teraz przesuwany w kierunku wyższych poziomów testowania, co sprawia, że IMO jest niewłaściwym narzędziem do tego zadania. TestNG radzi sobie dobrze w testowaniu jednostkowym, a dzięki solidnemu udostępnianiu danych i znakomitym możliwościom wykonywania testów działa jeszcze lepiej na poziomie testów integracji / automatyzacji.
A teraz to, co uważam za osobną kwestię, jak pisać dobrze ustrukturyzowane, czytelne i możliwe do utrzymania testy. Większość to jestem pewien, że wiesz, ale takie rzeczy Wzór Fabryki , Wzór polecenia i PageObjects (jeśli testowania stron WWW) są niezbędne, to jest bardzo ważne, aby mieć warstwę abstrakcji pomiędzy co twój testowej (SUT) i co rzeczywiste testu jest (twierdzenia logiki biznesowej). Aby mieć o wiele ładniejsze stwierdzenia, możesz użyć Hamcrest . Skorzystaj z dziedziczenia / interfejsów javas, aby zmniejszyć liczbę powtórzeń i wymusić podobieństwo.
Prawie zapomniałem, użyj również wzorca testowego konstruktora danych , to w połączeniu z adnotacją dostawcy danych TestNG jest bardzo przydatne.