Maven Surefire Plugin là một core plugin của Apache Maven giúp chúng ta có thể chạy được Unit Test của Maven project. Nó còn có thể generate report giúp chúng ta có thể xem lại kết quả : bao nhiêu test pass, bao nhiêu test failed và nguyên nhân là gì, cho phần Unit Test này. Cụ thể như thế nào? Chúng ta hãy tìm hiểu thêm về nó trong bài viết này các bạn nhé!
Mình sẽ tạo mới một Maven project với một ví dụ đơn giản có Unit Test như sau:
JUnit dependency như sau:
1 2 3 4 5 6 |
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> |
Class Calculation:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava.mavensurefireplugin; public class Calculation { public int add(int a, int b) { return a + b; } public int sub(int a, int b) { return a - b; } } |
Class CalculationTest:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package com.huongdanjava.mavensurefireplugin; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; public class CalculationTest { private Calculation calculation; @Before public void init() { calculation = new Calculation(); } @Test public void testAdd() { assertEquals(4, calculation.add(1, 3)); } @Test public void testSub() { assertEquals(2, calculation.sub(7, 5)); } } |
Lúc này, trong Eclipse, nếu các bạn click chuột phải vào project, chọn Run As rồi chọn Maven test thì các bạn sẽ thấy kết quả trong Console tab của Eclipse như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building maven-surefire-plugin 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-surefire-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ maven-surefire-plugin --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-surefire-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ maven-surefire-plugin --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-surefire-plugin --- [INFO] Surefire report directory: /Users/khanh/Working/Code/huongdanjava.com/maven-surefire-plugin/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.huongdanjava.mavensurefireplugin.CalculationTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.069 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.641 s [INFO] Finished at: 2018-10-10T02:32:21+07:00 [INFO] Final Memory: 10M/155M [INFO] ------------------------------------------------------------------------ |
Rõ ràng, như các bạn thấy, mặc dù mình không khai báo bất kỳ thứ gì liên quan đến Maven Surefire Plugin nhưng nó vẫn được gọi và chạy cùng với câu lệnh “mvn test” của Apache Maven. Đó là bởi vì Maven Surefire Plugin là core plugin của Apache Maven đó các bạn!
Maven Surefire Plugin có thể làm việc với các testing framework như JUnit hay TestNG. Không quan trọng các bạn đang sử dụng testing framework nào, kết quả của Unit Test vẫn như vậy.
Plugin này chỉ có một goal Maven duy nhất là test. Goal này sẽ được chạy mặc định trong giai đoạn test của quá trình build lifecycle hoặc khi các bạn chạy câu lệnh “mvn test”.
Và mặc định, tất cả các class với tên bắt đầu với Test hoặc kết thúc với Test, Tests, TestCase sẽ được pick để chạy Unit Test. Cho nên như các bạn thấy trong ví dụ trên, Maven Surefire Plugin đã tự động pick class CalculationTest lên để chạy Unit Test. Nếu bây giờ, các bạn đổi tên class này đi cho khác những điều kiện trên thì sẽ không thấy Unit Test cho class Calculation được chạy nữa.
Như mình nói ở đầu, sau khi chạy Unit Test xong, Maven Surefire Plugin sẽ generate report trong thư mục target/surefire-reports của project để record lại kết quả Unit Test.
Như các bạn thấy, có 2 định dạng file mà Maven Surefire Plugin sẽ generate là .txt và .xml.
Maven Surefire Plugin còn cho phép chúng ta exclude các class viết Unit Test mà chúng ta không muốn chạy hoặc include những class viết Unit Test nhưng tên của những class này không thoã mãn những điều kiện ở trên. Để làm những việc này thì các bạn phải khai báo tường mình plugin này vào tập tin pom.xml của mình. Ví dụ như mình exclude không chạy class CalculationTest của chúng ta như sau:
1 2 3 4 5 6 7 8 9 |
<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.0</version> <configuration> <excludes> <exclude>CalculationTest.java</exclude> </excludes> </configuration> </plugin> |
Kết quả:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building maven-surefire-plugin 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-surefire-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ maven-surefire-plugin --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-surefire-plugin --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ maven-surefire-plugin --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ maven-surefire-plugin --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.896 s [INFO] Finished at: 2018-10-10T02:34:24+07:00 [INFO] Final Memory: 10M/155M [INFO] ------------------------------------------------------------------------ |