原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十二)编写测试-简单测试


上一章我们分享了“什么是JUnit”,这一章开始将分享“如何使用Junit编写测试”,我们从一个“简单测试”实例讲起。
在测试类中编写测试方法,一般将方法注解为@Test,
@RepeatedTest,
@ParameterizedTest,
@TestFactory, @TestTemplate之一。我们从@Test开始。
绝大多数情况下,只需要用@Test定义测试方法,再加上4个生命周期方法@BeforeEach, @AfterEach, @BeforeAll和@AfterAll已经足够。所以,如果你时间有限,可以只学习本章的前面两节,后面的内容有空的时候再选择学习。
重要性:★★★★★
下面是一个测试类ConfigurationTest
,包含了两个测试方法:
package yang.yu.configuration;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
class ConfigurationTest {
@TempDir
Path tempDir;
/**
* key存在,value存在,应当返回value
*/
@Test
void get_string_without_defaultValue_happy() throws Exception {
Path file = tempDir.resolve("conf.properties");
Files.write(file, Arrays.asList("birthday=2002-05-11",
"size=15",
"closed=true",
"locked=false",
"salary=12.5",
"name=张三",
"noneValue="));
Configuration instance = Configuration.builder()
.fromFile(file.toFile())
.dateFormat("yyyy-MM-dd")
.build();
assertThat(instance.getString("name")).isEqualTo("张三");
}
/**
* key存在, value存在,格式正确,应当返回value
*/
@Test
void get_int_with_defaultValue_and_with_value() throws Exception {
Path file = tempDir.resolve("conf.properties");
Files.write(file, Arrays.asList("birthday=2002-05-11",
"size=15",
"closed=true",
"locked=false",
"salary=12.5",
"name=张三",
"noneValue="));
Configuration instance = Configuration.builder()
.fromFile(file.toFile())
.dateFormat("yyyy-MM-dd")
.build();
assertThat(instance.getInt("size", 1000)).isEqualTo(15);
}
}
说明如下:
被注解为@Test
的方法是测试方法。这里有两个测试方法:get_string_without_defaultValue_happy()
和get_int_with_defaultValue_and_with_value()
。
因为拥有测试方法,这个类就自动成为了测试类,会被Eclipse、IDEA等IDE和Maven、Gradle等构建工具自动识别,执行测试。
这个测试类用于测试被测类Configuration
。Configuration
能够从文本配置文件中读取配置项的值。
通过@TempDir
注解创建了一个临时目录(这个注解在后面的章节中讲述)。在两个测试方法中,都会在这个临时目录下创建conf.properties
文件,并向其中写入多行配置数据。从这个配置文件创建被测类Configuration
的实例,进行测试。
可以见到,两个测试方法之间拥有大量的重复代码。用于创建被测类实例和准备测试数据。
下一节我们通过"生命周期方法"消除这些重复。

转载自:https://juejin.cn/post/6844904175126446088