As we all know JUnit is the most famous unit testing framework. Nobody needs any type of introduction for this small and easy framework. Most of the developers are using this as their unit testing framework in their day to day development life. And can I ask one question? Do you know TestNG? a unit testing framework which is named as ‘Next Generation test ing tool’. Here is a small comparison on these two unit testing frameworks.
TestNG Version 5.6 | JUnit Version 4.4 | ||
1 | Extensive annotation support | 1 | Supports Annotations but not that much rich as TestNG |
2 | Flexible test configuration in an external XML file. | 2 | Configuration is less and no XML file configuration at all. |
3 | External configuration gives more flexibility. | 3 | Less configuration makes it more easy and really fast to create 🙂 |
4 | Support for data-driven testing (with @DataProvider). | 4 | We have to integrate with EasyMock for Mock object testing |
5 | Support for parameters using @Parameters | 5 | No such type of annotations |
6 | Allows distribution of tests on slave machines. | 6 | NA |
7 | Supported by a variety of tools and plug-ins (Eclipse, IDEA, Maven, etc…). | 7 | Cant defeat JUnit in this matter. It has a lot of supporting tools and plugins. |
8 | Embeds BeanShell (scripting) for further flexibility. | 8 | JUnit dont have this feature at all. |
9 | Default JDK functions for runtime and logging (no dependencies). | 9 | I dont aware of logging support in JUnit. |
10 | Dependent methods for application server testing. | 10 | NA |
11 | Creates a small HTML report at eash time of testing. Which will display the passed/failed tests and errors. It gives the XML output for testing also. | 11 | JUnit also creates the test report in XML form. But it will not create an HTML form with passed/failed testnames at each test run. But we can create a very useful JavaDoc Style report for entire JUnit testing |
12 | We dont need a specific name for setup and tearDown. We can make any method/ any number of methods that works on start up | 12 | Same in Junit also. |
13 | Here we can create Groups, Suites, etc and it also gives more annotations like @After/BeforeSuite. @After/BeforeGroup. @After/BeforeClass. @After/BeforeMethod etc |
13 | @After/Before works in methods and @After/BeforeClass will work with classes. But no groups or suites. |
14 | No annotation like @Ignore. But we can ignore through XML congiurations. | 14 | @Ignore annotation is there for ignoring a method. |
15 | Dependancy of previous methods can be managed easily | 15 | Methods dependancy handling between each test methods is not possible easily. |
16 | Option to run failed tests only/ last test only in the IDE | 16 | We have to select and run each methods which are failed |
17 | No AssertThat method support | 17 | It gives a method AssertThat that is very much flexible for giving a Business type result message for the tests. |
18 | Using ‘ExpectedExceptions in @Test Annotation’ we can expect some exceptions in the test methods and thus the method will be success. | 18 | We can use (expected = Exception.class) in the @Test annotation |
Conclusion
If you are a very busy programmer and want very little time to spend on testing the code then go for JUnit. It is giving enough support for that. But you need a good testing and more configurable options for each test cases then choose TestNG. The depeneded methods are also can make work on TestNG very easily.
@Ignore in Junit ——- there is disable in testng, see the @test annotation
testng has an Assert class.