Java原生并没有提供单元测试的方法,一般的简单测试使用main
方法进行测试,但是如果对于复杂的测试,则需要使用第三方框架来实现,例如JUnit
框架
官网:https://junit.org/junit5/
JUnit5 的组成:JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit5 建议使用 Java8 及以上版本
TestEngine
在平台运行的新测试框架的 APITestEngine
实现来运行这些注释编写的测试。JUnit4
@Test
的包是org.junit.Test
@RunWith(SpringRunner.class)
public
修饰JUnit5
@Test
的包是org.junit.jupiter.api.Test
@RunWith(SpringRunner.class)
public
修饰Eclipse
build path - add libraries - JUnit 4 - 下一步
@Test
,并在单元测试类中导入:import org.junit.Test;
run as - JUnit Test
IDEA
在代码空白位置右键,Generate,Test
Testing library
选择Junit版本Class name
输入测试类名称Destination packages
选择测试类的包Member
选择要要测试的方法OK
Annotations | 描述 |
---|---|
@BeforeEach | 在方法上注解,在每个测试方法运行之前执行。 |
@AfterEach | 在方法上注解,在每个测试方法运行之后执行 |
@BeforeAll | 该注解方法会在所有测试方法之前运行,该方法必须是静态的。 |
@AfterAll | 该注解方法会在所有测试方法之后运行,该方法必须是静态的。 |
@Test | 用于将方法标记为测试方法 |
@DisplayName | 用于为测试类或测试方法提供任何自定义显示名称 |
@Disable | 用于禁用或忽略测试类或方法 |
@Nested | 用于创建嵌套测试类 |
@Tag | 用于测试发现或过滤的标签来标记测试方法或类 |
@TestFactory | 标记一种方法是动态测试的测试工场 |
@Test
void testDemo() {
}
@RepeatedTest(5)
void testDemo(TestInfo testInfo,RepetitionInfo repetitionInfo){
System.out.println("repeat:" + testInfo.getDisplayName());
System.out.println("这是第 "+ repetitionInfo.getCurrentRepetition()+ "次重复");
}
@ParameterizedTest
@ValueSource(strings = {"java", "python", "go"})
void testDemo(String candidate) {
assertTrue(candidate.contains("o"));
}
@Test
@Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
void testDemo() {
// fails if execution time exceeds 500 milliseconds
}