In Junit, test suite allows us to aggregate all test cases from multiple classes in one place and run it together.

To run the suite test, you need to annotate a class using below-mentioned annotations:

  1. @Runwith(Suite.class)
  2. @SuiteClasses(test1.class,test2.class……) or

    @Suite.SuiteClasses ({test1.class, test2.class……})

With above annotations, all the test classes in the suite will start executing one by one.

Steps to create Test Suite and Test Runner

Step 1) Create a simple test class (e.g. MyFirstClassTest) and add a method annotated with @test.

Create JUnit Test Suite

Step 2) Create another test class to add (e.g. MySecondClassTest) and create a method annotated with @test.

Create JUnit Test Suite

Step 3) To create a testSuite you need to first annotate the class with @RunWith(Suite.class) and @SuiteClasses(class1.class2…..).

Create JUnit Test Suite

Step 4) Create a Test Runner class to run our test suite as given below;

Create JUnit Test Suite

Code Explanation:

  • Code Line 8: Declaring the main method of the class test which will run our JUnit test.
  • Code Line 9: Executing test cases using JunitCore.runclasses which takes the test class name as a parameter (In the example above, you are using TestSuiteExample.class shown in step 3).
  • Code Line 11: Processing the result using for loop and printing out failed result.
  • Code Line 13: Printing out the successful result.

Output: Here is the output which shows successful test with no failure trace as given below:

Create JUnit Test Suite

JUnit Test Suite Example

Consider a more complex example

JunitTest.java

JunitTest.java is a simple class annotated with @RunWith and @Suite annotations. You can list out number of .classes in the suite as parameters as given below:

package guru99.junit;		
import org.junit.runner.RunWith;		
import org.junit.runners.Suite;		

@RunWith(Suite.class)				
@Suite.SuiteClasses({				
  SuiteTest1.class,
  SuiteTest2.class,  			
})		

public class JunitTest {				
			// This class remains empty, it is used only as a holder for the above annotations		
}

SuiteTest1.java

SuiteTest1.java is a test class having a test method to print out a message as given below. You will use this class as a suite in above mentioned class.

package guru99.junit;		

import static org.junit.Assert.assertEquals;				

import org.junit.Test;		

public class SuiteTest1 {				

    public String message = "Saurabh";							

    JUnitMessage junitMessage = new JUnitMessage(message);							

    @Test(expected = ArithmeticException.class)					
    public void testJUnitMessage() {					

        System.out.println("Junit Message is printing ");					
        junitMessage.printMessage();			

    }		

    @Test		
    public void testJUnitHiMessage() {					
        message = "Hi!" + message;							
        System.out.println("Junit Hi Message is printing ");					
        assertEquals(message, junitMessage.printHiMessage());					
        System.out.println("Suite Test 2 is successful " + message);							
    }		
}		

SuiteTest2.java

SuiteTest2.java is another test class similar to SuiteTest1.java having a test method to print out a message as given below. You will use this class as suite in JunitTest.java.

package guru99.junit;		

import org.junit.Assert;		
import org.junit.Test;		

public class SuiteTest2 {				
   	

    @Test		
    public void createAndSetName() {					
        		

        String expected = "Y";					
        String actual = "Y";					

        Assert.assertEquals(expected, actual);					
        System.out.println("Suite Test 1 is successful " + actual);							
    }		

}		

Output

After executing JunitTest.java which contains a suite having test1.java and test2.java, you will get below output:

Create JUnit Test Suite

Create JUnit Test Suite

Summary

In this tutorial, you have learned basics of test harness and test suites in details with an example.

  • Test harness or automation Testing is a software or a collection of software, which allows a user to test data with multiple inputs and control the execution
  • Test harness actually enables a test framework that does all the work of executing tests using a test library and generating a test report
  • In Junit, test suite allows us to aggregate all test cases of many classes in one place and run it together.