Đặt tên cho 1 tes trong automation cũng giống như tên một test case phải cố gắng cân bằng 3 yếu tố:
- Dễ hiểu
- Đủ ý
- Và ngắn nhất có thể
Nghe cứ như đòi mua 1 cái laptop “rẻ, bền, đẹp” ấy nhỉ. =)))) nhưng không phải là không thể làm được. Với sự giúp ích của JUnit5, bạn có thể config dễ dàng với 1 số techniques khác nhau.
Nội dung bài viết
I. Dùng @DisplayName
Annotation @DisplayName có thể áp dụng cho:
- Class
- Method
Ví dụ
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @DisplayName("Login") public class Login { @Nested @DisplayName("passed") class PositiveCases{ @Test @DisplayName("Using right credentials") void loginWithRightCredentials(){ System.out.println("login success"); } } @Nested @DisplayName("failed") class NegativeCases{ @Test @DisplayName("Using wrong credentials") void loginWithWrongCredentials(){ System.out.println("login failed"); } @Test @DisplayName("When did not input anything") void loginWithNoCredentials(){ System.out.println("login failed"); } } }
II. Dùng @DisplayNameGeneration
Việc viết tên test trên DisplayName và tên method có vẻ như là double work. Ta có thể giảm bớt việc đó bằng cách:
- Sử dụng “_” để viết test dễ đọc hơn. (Điều này vi phạm convention đặt tên method của Java Standard, nhưng để tăng tính dễ đọc thì cũng có thể bỏ qua)
- Ta có thể sử dụng thêm @DisplayNameGeneration để remove cái “_” trong result.
- Để tránh việc viết đi viết lại cái dòng @DisplayNameGeneration ở đầu mỗi class, ta có thể viết nó vào file
junit-platform.properties
đặt ở trongsrc/test/resources
Nội dung file sẽ như sau:
junit.jupiter.displayname.generator.default = org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores
Ngoài ra, nếu bạn muốn custom 1 cái rule để displayName cũng được, bạn có thể follow hướng dẫn ở đây.
III. Tổng kết
Với việc sử dụng thêm 1 – 2 cái annotation, test name đã trở nên dễ đọc và đầy đủ thông tin mà không quá tốn công sức. Hi vọng, sẽ có ích cho ai đang dùng Junit5. Happy learning!