JUnit Tutorial | Testing Framework for Java
It is an open-source testing framework for java programmers. The java programmer can create test cases
and test his/her own code.
It is one of the unit testing framework. Current version is junit4.
To perform unit testing, we need to create test cases. The unit test case is a code that ensures that the
program logic works as expected. The org.junit package contains many interfaces and classes for junit
testing.
Types of unit testing
There are two ways to perform unit testing: 1) manual testing 2) automated testing.
1) Manual Testing
If you execute the test cases manually without any tool support, it is known as manual testing. It is time
consuming and less reliable.
2) Automated Testing
If you execute the test cases by tool support, it is known as automated testing. It is fast and more reliable.
Annotations for Junit testing
The Junit 4.x framework is annotation based, so let's see the annotations that can be used while writing the
test cases.
@Test annotation specifies that method is the test method.
@Test(timeout=1000) annotation specifies that method will be failed if it takes longer than 1000
milliseconds (1 second).
@BeforeClass annotation specifies that method will be invoked only once, before starting all the tests.
@Before annotation specifies that method will be invoked before each test.
@After annotation specifies that method will be invoked after each test.
@AfterClass annotation specifies that method will be invoked only once, after finishing all the tests.
Assert class
The org.junit.Assert class provides methods to assert the program logic.
Methods of Assert class
The common methods of Assert class are as follows:
1. void assertEquals(boolean expected,boolean actual): checks that two primitives/objects are
equal. It is overloaded.
2. void assertTrue(boolean condition): checks that a condition is true.
3. void assertFalse(boolean condition): checks that a condition is false.
4. void assertNull(Object obj): checks that object is null.
5. void assertNotNull(Object obj): checks that object is not null.
Required jar files
You need to load junit4.jar and hamcrest-core.jar files.
Write the program logic
Let's write the logic to find the maximum number for an array.
1. package com.javatpoint.logic;
2. public class Calculation {
3.
4. public static int findMax(int arr[]){
5. int max=0;
6. for(int i=1;i<arr.length;i++){
7. if(max<arr[i])
8. max=arr[i];
9. }
10. return max;
11. }
12. }
Write the test case
Here, we are using JUnit 4, so there is no need to inherit TestCase class. The main testing code is written in
the testFindMax() method. But we can also perform some task before and after each test, as you can see in
the given program.
1. package com.shiva.testcase;
2.
3. import static org.junit.Assert.*;
4. import com.javatpoint.logic.*;
5. import org.junit.Test;
6.
7. public class TestLogic {
8.
9. @Test
10. public void testFindMax(){
11. assertEquals(4,Calculation.findMax(new int[]{1,3,4,2}));
12. assertEquals(-1,Calculation.findMax(new int[]{-12,-1,-3,-4,-2}));
13. }
14. }
Output:Assertion Error
As you can see, when we pass the negative values, it throws AssertionError because second time findMax()
method returns 0 instead of -1. It means our program logic is incorrect.
Correct program logic
As you can see, program logic to find the maximum number for the given array is not correct because it
doesn't return -1 in case of negative values. The correct program logic is given below:
1. package com.shiva.logic;
2. public class Calculation {
3.
4. public static int findMax(int arr[]){
5. int max=arr[0];//arr[0] instead of 0
6. for(int i=1;i<arr.length;i++){
7. if(max<arr[i])
8. max=arr[i];
9. }
10. return max;
11. }
12. }
very helpfull..
ReplyDelete