Mục lục
Trong JUnit 5, chúng ta có thể sử dụng @DisplayName để tuỳ biến tên cho test class và test method.
Default name
Mặc định tên của test class và test method trong kết quả thực thi unit test sẽ trùng với tên khai báo trong mã code.
package displayname; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; public class DisplayNameExample { @Test public void testStringBlank() { String input = "test"; assertTrue(input != null && input != ""); } }
Custom test class và test method name
Sử dụng @DisplayName để đặt tên cho test class và test method sẽ làm cho kết quả thực thi unit test khả quan hơn với tên tường mình do chúng ta đặt.
package displayname; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; @DisplayName("DisplayName example") public class DisplayNameExample { @Test @DisplayName("Test String blank") public void testStringBlank() { String input = "test"; assertTrue(input != null && input != ""); } }
Display name Generators
Chúng ta cũng có thể custom tên được generate bởi JUnit với @DisplayNameGenetation.
Mặc định JUnit sẽ lấy tên được khai báo trong mã code sử dụng trong kết quả thực thi unit test, giờ chúng ta sẽ thay thế các dấu “_” bằng 1 khoảng trắng.
package displayname; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class DisplayNameGeneratorExample { @Test void test_spaces_ok() { } @Test void test_spaces_fail() { } }
Ngoài ra, chúng ta có thể tạo một DisplayNameGenerator class tuỳ biến theo ý muốn
package displayname; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; import java.lang.reflect.Method; import java.util.Arrays; import java.util.stream.Collectors; @DisplayNameGeneration(CustomDisplayGenerator.CustomDisplayNameGenerator.class) public class CustomDisplayGenerator { @Test void test_spaces_ok() { } @Test void test_spaces_fail() { } static class CustomDisplayNameGenerator extends DisplayNameGenerator.Standard { @Override public String generateDisplayNameForClass(Class<?> testClass) { return "New Name for test class"; } @Override public String generateDisplayNameForNestedClass(Class<?> nestedClass) { return super.generateDisplayNameForNestedClass(nestedClass); } @Override public String generateDisplayNameForMethod(Class<?> testClass, Method testMethod) { String name = testMethod.getName(); return Arrays.stream(name.split("_")).collect(Collectors.joining(" | ")); } } } C
ParameterizedTest Name
@ParameterizedTest cho phép thực thi một test method nhiều lần với các tham số đầu vào được cung cấp bởi nó.
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; import static org.junit.jupiter.params.provider.Arguments.arguments; public class DisplayNameParamTest { @ParameterizedTest(name = "#{index} - Test with TimeUnit: {0}") @EnumSource(value = TimeUnit.class, names = {"MINUTES", "SECONDS"}) void test_timeunit_ok(TimeUnit time) { } @ParameterizedTest(name = "#{index} - Test with {0} and {1}") @MethodSource("argumentProvider") void test_method_multi(String str, int length) { } static Stream<Arguments> argumentProvider() { return Stream.of( arguments("abc", 3), arguments("lemon", 2) ); } }
Các ràng buộc giá trị cần chú ý:
- {index}: Lần thực thi thứ index.
- {int value}: Giá trị tham số đầu vào tại vị trí value.
Tóm lược
Như vậy chúng ta đã tìm hiểu xong về @DisplayName trong JUnit 5, nó là một anntation khá dễ sử dụng trong Junit 5 giúp kết quả báo cáo trực quan hơn với tên mà chúng ta định nghĩa.
Nếu các bạn gặp khó khăn trong quá trình thực nghiệm, có thể checkout source mình đã soạn sẵn tại github repository.
Nguồn tham khảo