官网:https://junit.org
历史:1997年 Erich Gamma 和 Kent Beck 单元测试框架 JUnit
assert:断言,用来测试方法
assume:假设,用来验证变量
JUnit 应用组成
1、配置Maven依赖
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId> <!-- 提供assertEquals等断言方法、@Test等测试注解 -->
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId> <!-- 提供@ParameterizedTest、@ValueSource、@CsvSource等 -->
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
2、测试类
在 src/test/java下新建包 和 测试类
@DisplayName("test class name") // 在测试报告中显示的名称,默认为类名
public class MyTest {
@Test // 声明为测试方法
@Disabled // 可以禁用一个测试方法
@EnabledOnOs({ LINUX, MAC }) // 指定操作系统生效
@DisabledOnOs(WINDOWS) // 指定操作系统失效
@EnabledOnJre(JAVA_8) // 指定JRE生效
@BeforeEach // 在每个其他测试方法执行前都会执行这个方法,另有@AfterEach
void myFirstTest() {
assertEquals(2, 1+1); // 相等断言
assertEquals(4, 3, "wrong"); // 断言失败时,显示的错误信息
assertTrue('b' < 'b', () -> "wrong 1" + "wong 2"); // 断言真,用lambda表达式提供错误信息
assertAll("wong", () -> assertEquals("John", "John"), () -> assertEquals("Doe", "dd"); // 断言全部通过,第一个参数为错误信息
assertNotNull("notnull"); // 断言非空
assertTimeout(java.time.Duration.ofMinutes(2), () -> { }); // 断言{}内的代码在2分钟内执行返回
assertTimeoutPreemptively(java.time.Duration.ofMinutes(2), () -> { }); // 2分钟后断言,不等方法返回
assertThrows(IllegalArgumentException.class, () -> { }); // 断言{}抛出一个IllegalArgumentException
assumeTrue(1==2); // 假设真
assumingThat(1==1, () -> { }); // 假设为真,才执行lambda表达式
}
@BeforeAll // 用于修饰静态方法,这个类中最先执行这个测试方法,另有 @AfterAll
static void mySecondTest(){
}
@Nested // 嵌套
class WhenNew {
@RepeatedTest(10) // 重复测试10次
static void isEmpty() {
assertTrue(true);
}
@ParameterizedTest // 传参测试
@ValueSource(strings = { "1", "2", "3" }) // 参数的取值范围
void palindromes(String param) {
assertTrue(param.equals("1"));
}
@ParameterizedTest
@CsvSource({ "foo, 1", "bar, 2", "baz, 3" }) // 多个参数
void palindromes(String param1, int param2) {
assertTrue(param2 == 1);
}
}
}
3、运行测试
测试类右键 -> Run
整合Spring
1、配置Maven依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.0.RELEASE</version>
<scope>test</scope>
</dependency>
2、测试类
@ExtendWith(SpringExtension.class) // 使用Spring扩展
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringTest {
@Autowired // 自动注入
private CityServiceImpl service;
@Test
void myFirstTest() {
assertNotNull(service);
}
}
整合Maven
1、新增Maven插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
2、正确命名测试类
识别的测试类:/Test.java、/Test.java、/TestCase.java
排除的测试类:/AbstractTest.java、*/AbstractTestCase.java
3、执行 mvn clean test
网友评论