使用
- IDEA右键测试包, 一件运行包下的所有 Tests
断言
| 方法 | 说明 | 示例 | 
|---|---|---|
| assertEquals(expected, actual) | 判断两个值相等 | Assertions.assertEquals(2, 1 + 1) | 
| assertNotEquals(unexpected, actual) | 判断两个值不相等 | Assertions.assertNotEquals(3, 1 + 1) | 
| assertTrue(condition) | 判断条件为 true | Assertions.assertTrue(list.isEmpty()) | 
| assertFalse(condition) | 判断条件为 false | Assertions.assertFalse(list.isEmpty()) | 
| assertNull(actual) | 判断对象为 null | Assertions.assertNull(user) | 
| assertNotNull(actual) | 判断对象不为 null | Assertions.assertNotNull(user) | 
| assertSame(expected, actual) | 判断两个对象引用相同(地址相等) | Assertions.assertSame(list1, list2) | 
| assertNotSame(unexpected, actual) | 判断两个对象引用不同 | Assertions.assertNotSame(list1, list2) | 
| assertThrows(expectedType, executable) | 判断执行代码抛出指定异常 | Assertions.assertThrows(IllegalArgumentException.class, () -> { throw new IllegalArgumentException(); }) | 
| assertAll(executables) | 批量断言(所有断言都执行,失败时汇总) | Assertions.assertAll("用户信息", () -> assertEquals("张三", user.getName()), () -> assertEquals(20, user.getAge())) | 
@Rule
- @Rule是JUnit4.7加入的新特性,有点类似于拦截器,用于在测试方法执行前后添加额外的处理。实际上是@Before,@After的另一种实现- 需要注解在实现了TestRule的public成员变量上或者返回TestRule的方法上
- 相应Rule会应用于该类每个测试方法
 
- 允许在测试类中非常灵活的增加或重新定义每个测试方法的行为,简单来说就是提供了测试用例在执行过程中通用功能的共享的能力 ^1
- 案例参考下文ErrorCollector
ErrorCollector类收集错误统一抛出
- Junit在遇到一个测试失败时,并会退出,通过ErrorCollector可实现收集所有的错误,等方法运行完后统一抛出
- 案例
| 1 | public class Example { | 
Before/After钩子
| 1 | import org.junit.jupiter.api.*; | 
SpringBoot测试
- 测试环境使用单独的配置文件- 可使用@ActiveProfiles("test")激活application-test.yml的配置文件
- 如果在src/test/resources目录下增加application-test.yml,运行时会覆盖src/main/resources下的该文件
 
- 可使用
- 普通测试
| 1 | // 可以自动的注册所有添加@Controller或者@RestController的路由的MockMvc了 | 
- 基于登录: 如有些服务需要登录才能访问
| 1 | 4j | 
多线程测试
多线程简单测试模板
| 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();
 }
 }
 
参考
