使用
@Rule
@Rule
是JUnit4.7加入的新特性,有点类似于拦截器,用于在测试方法执行前后添加额外的处理。实际上是@Before,@After的另一种实现- 需要注解在实现了TestRule的public成员变量上或者返回TestRule的方法上
- 相应Rule会应用于该类每个测试方法
- 允许在测试类中非常灵活的增加或重新定义每个测试方法的行为,简单来说就是提供了测试用例在执行过程中通用功能的共享的能力 ^1
- 案例参考下文ErrorCollector
ErrorCollector类收集错误统一抛出
- Junit在遇到一个测试失败时,并会退出,通过ErrorCollector可实现收集所有的错误,等方法运行完后统一抛出
- 案例
1 | public class Example { |
Springboot测试
- 测试环境使用单独的配置文件
- 可使用
@ActiveProfiles("test")
激活application-test.yml的配置文件 - 如果在
src/test/resources
目录下增加application-test.yml,运行时会覆盖src/main/resources
下的该文件
- 可使用
- 普通测试
1 | // 可以自动的注册所有添加@Controller或者@RestController的路由的MockMvc了 |
多线程测试
多线程简单测试模板
1 | public class TestU { |
基于GroboUtils
多线程测试(基于Junit+GroboUtils)
安装依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14<!-- 第三方库 -->
<repositories>
<repository>
<id>opensymphony-releases</id>
<name>Repository Opensymphony Releases</name>
<url>https://oss.sonatype.org/content/repositories/opensymphony-releases</url>
</repository>
</repositories>
<dependency>
<groupId>net.sourceforge.groboutils</groupId>
<artifactId>groboutils-core</artifactId>
<version>5</version>
</dependency>使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void multiRequestsTest() {
int runnerCount = 100; // 并发数
// 构造一个Runner
TestRunnable runner = new TestRunnable() {
public void runTest() throws Throwable {
// TODO 测试内容
// Thread.sleep(1000); // 结合sleep表示业务处理过程,测试效果更加明显
System.out.println("===>" + Thread.currentThread().getId());
}
};
TestRunnable[] arrTestRunner = new TestRunnable[runnerCount];
for (int i = 0; i < runnerCount; i++) {
arrTestRunner[i] = runner;
}
MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(arrTestRunner);
try {
mttr.runTestRunnables();
} catch (Throwable e) {
e.printStackTrace();
}
}
参考