Java: Tham số hóa test
JUnit giới thiệu một tính năng mới được gọi là tham số hóa test. Các tham số hóa test cho phép developer chạy đi chạy lại cùng một test bằng cách sử dụng các giá trị khác nhau. Có năm bước mà bạn cần làm theo để tạo một tham số hóa test.
- Chú thích lớp test với @RunWith(Parameterized.class).
- Tạo một phương thức public static được chú thích bằng @Parameters mà trả về một Collection các đối tượng (dưới dạng Mảng) dưới dạng tập dữ liệu test.
- Tạo một hàm tạo public nhận những gì tương đương với một "hàng" dữ liệu test.
- Tạo một biến thể hiện (instance) cho mỗi "cột" của dữ liệu test.
- Tạo (các) test case của bạn bằng cách sử dụng các biến thể hiện làm nguồn dữ liệu test.
Test case sẽ được gọi một lần cho mỗi hàng dữ liệu. Bây giờ ta sẽ xem xem các tham số hóa test hoạt động ra sao.
Tạo một lớp
Tạo một lớp java để được test, chẳng hạn như PrimeNumberChecker.java trong C:\>JUNIT_WORKSPACE.
public class PrimeNumberChecker { public Boolean validate(final Integer primeNumber) { for (int i = 2; i < (primeNumber / 2); i++) { if (primeNumber % i == 0) { return false; } } return true; } }
Tạo lớp test case được tham số hóa
Tạo một lớp test java, chẳng hạn như PrimeNumberCheckerTest.java. Tạo tệp lớp java có tên PrimeNumberCheckerTest.java trong C:\>JUNIT_WORKSPACE.
import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.Before; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.junit.runner.RunWith; import static org.junit.Assert.assertEquals; @RunWith(Parameterized.class) public class PrimeNumberCheckerTest { private Integer inputNumber; private Boolean expectedResult; private PrimeNumberChecker primeNumberChecker; @Before public void initialize() { primeNumberChecker = new PrimeNumberChecker(); } // Mỗi tham số nên được đặt thành đối số ở đây // Khi trình chạy được kích hoạt thì nó sẽ truyền các đối số // từ các tham số mà ta đã tạo trong phương thức primeNumbers() public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) { this.inputNumber = inputNumber; this.expectedResult = expectedResult; } @Parameterized.Parameters public static Collection primeNumbers() { return Arrays.asList(new Object[][] { { 2, true }, { 6, false }, { 19, true }, { 22, false }, { 23, true } }); } // This test will run 4 times since we have 5 parameters defined @Test public void testPrimeNumberChecker() { System.out.println("Parameterized Number is : " + inputNumber); assertEquals(expectedResult, primeNumberChecker.validate(inputNumber)); } }
Tạo lớp test runner
Tạo file java có tên TestRunner.java trong C:\>JUNIT_WORKSPACE để thực thi (các) test case.
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Biên dịch các lớp PrimeNumberChecker, PrimeNumberCheckerTest và Test Runner bằng javac:
C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java TestRunner.java
Bây giờ chạy Test Runner, sẽ chạy các trường hợp thử nghiệm được xác định trong lớp Test Case đã cung cấp.
C:\JUNIT_WORKSPACE>java TestRunner
Xác minh kết quả đầu ra.
Parameterized Number is : 2 Parameterized Number is : 6 Parameterized Number is : 19 Parameterized Number is : 22 Parameterized Number is : 23 true