Bạn có thể phân chia chúng rất dễ dàng bằng cách sử dụng các danh mục JUnit và Maven.
Điều này được thể hiện rất, rất ngắn gọn dưới đây bằng cách tách các bài kiểm tra đơn vị và tích hợp.
Xác định giao diện đánh dấu
Bước đầu tiên trong việc nhóm thử nghiệm bằng các danh mục là tạo giao diện đánh dấu.
Giao diện này sẽ được sử dụng để đánh dấu tất cả các bài kiểm tra mà bạn muốn được chạy dưới dạng kiểm tra tích hợp.
public interface IntegrationTest {}
Đánh dấu các lớp kiểm tra của bạn
Thêm chú thích danh mục vào đầu lớp kiểm tra của bạn. Nó có tên của giao diện mới của bạn.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Cấu hình kiểm tra đơn vị Maven
Cái hay của giải pháp này là không có gì thực sự thay đổi đối với mặt thử nghiệm đơn vị của mọi thứ.
Chúng tôi chỉ cần thêm một số cấu hình vào plugin maven Surefire để làm cho nó bỏ qua mọi thử nghiệm tích hợp.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
Khi bạn thực hiện kiểm tra sạch mvn, chỉ các kiểm tra đơn vị chưa được đánh dấu của bạn sẽ chạy.
Cấu hình kiểm tra tích hợp Maven
Một lần nữa cấu hình cho việc này rất đơn giản.
Để chỉ chạy các bài kiểm tra tích hợp, hãy sử dụng:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
Nếu bạn bọc cái này trong một hồ sơ bằng id IT
, bạn chỉ có thể chạy các bài kiểm tra nhanh bằng cách sử dụng mvn clean install
. Để chạy chỉ tích hợp / kiểm tra chậm, sử dụng mvn clean install -P IT
.
Nhưng thông thường nhất, bạn sẽ muốn chạy các bài kiểm tra nhanh theo mặc định và tất cả các bài kiểm tra với -P IT
. Nếu đó là trường hợp, thì bạn phải sử dụng một mẹo:
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Như bạn có thể thấy, tôi loại trừ các bài kiểm tra được chú thích java.io.Serializable
. Điều này là cần thiết bởi vì cấu hình sẽ kế thừa cấu hình mặc định của plugin Surefire, vì vậy ngay cả khi bạn nói <excludedGroups/>
hoặc <excludedGroups></excludedGroups>
, giá trị com.test.annotation.type.IntegrationTest
sẽ được sử dụng.
Bạn cũng không thể sử dụng none
vì nó phải là một giao diện trên đường dẫn lớp (Maven sẽ kiểm tra điều này).
Ghi chú:
- Việc phụ thuộc
surefire-junit47
chỉ cần thiết khi Maven không tự động chuyển sang trình chạy JUnit 4. Sử dụng groups
hoặc excludedGroups
phần tử sẽ kích hoạt chuyển đổi. Xem ở đây .
- Hầu hết các mã ở trên được lấy từ tài liệu cho plugin Maven Failsafe. Xem phần "Sử dụng Danh mục JUnit" trên trang này .
- Trong các thử nghiệm của mình, tôi thấy rằng điều này thậm chí hoạt động khi bạn sử dụng
@RunWith()
các chú thích để chạy các bộ hoặc các thử nghiệm dựa trên Spring.