Hi David,
the main point to remember is, that JUnit was born with
unit tests in mind, while TestNG from the very beginning aimed at different types of tests. This makes JUnit good enough for unit tests, but less appropriate for integration and end-to-end tests (which does not mean you can't use it there!).
In my opinion there are numerous benefits you gain when moving from JUnit to TestNG, however I do not think there is any killer feature that would make your coding 50% more effective!
Some time ago I created a
presentation which compares JUnit and TestNG, but let me mention few TestNG features here:
* decent
parametrized tests,
* some
support for concurrency,
*
dependencies between tests ,
*
test groups,
* very simple to customize its output with custom
listeners and
reporters,
* other (more advanced) things like factories, methods interceptors or annotations transformers.
Some of the above features really shine outside the realm of unit tests, while some (e.g. parametrized tests or concurrency support) can be also used there. There is no single feature I would point out to, but rather when gathered together they give significantly more power to your hands.
Also, if you look at the development of both projects, you will see a constant improvements and releases of TestNG which contrasts with a rather stagnant JUnit.
P.S. To be honest I have to admit, that some of TestNG features are available as extensions to JUnit, for example
parametrized tests.