JUnit is a unit testing framework for the Java programming language.In this article I will explain how to create test with predefined values.This feature works in JUnit 4.
Structure of a parameterized test class
To mark a test class as a parameterized test, you must first annotate it with @RunWith(Parameterized.class). The class must then provide at least three entities:
How it's work
Values from static method goes in our constructor and instantiate class over and over.(Number of parameters in constructor should correspond to the number of parameters in each array)
Example
I this example test will check does 1 + 4 =5 and other, all data it will take from array.
Structure of a parameterized test class
To mark a test class as a parameterized test, you must first annotate it with @RunWith(Parameterized.class). The class must then provide at least three entities:
- A static method that generates and returns test data,
- A constructor that stores the test data
- A test
How it's work
Values from static method goes in our constructor and instantiate class over and over.(Number of parameters in constructor should correspond to the number of parameters in each array)
Example
I this example test will check does 1 + 4 =5 and other, all data it will take from array.
//tested class public class Counter { private double x; private double y; public Counter(double x, double y){ this.x = x; this.y = y; } public double addXandY(){ return x + y; } }
import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.junit.runner.RunWith; import static org.junit.Assert.*; @RunWith(Parameterized.class) public class ParameterizedTestExample { private double number; private double number2; private double result; private Counter coun; //constructor takes parameters from array public ParameterizedTestExample(double number, double number2, double result1) { this.number = number; this.number2 = number2; this.result = result1; coun = new Counter(number, number2); } //array with parameters @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1, 4, 5 }, { 2, 7, 9 }, { 3, 7, 10 }, { 4, 9, 13 } }; return Arrays.asList(data); } //running our test @Test public void testCounter() { assertEquals("Result add x y", result, coun.addXandY(), 0); } }
You can have a look at TestNG (http://testng.org/). TestNG allows you to annotate a method with @DataProvider annotation to supply the values you need to test. More details here:
ReplyDeletehttp://testng.org/doc/documentation-main.html#parameters-dataproviders