likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 6

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

原创 | 使用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等构建工具自动识别,执行测试。

这个测试类用于测试被测类ConfigurationConfiguration能够从文本配置文件中读取配置项的值。

通过@TempDir注解创建了一个临时目录(这个注解在后面的章节中讲述)。在两个测试方法中,都会在这个临时目录下创建conf.properties文件,并向其中写入多行配置数据。从这个配置文件创建被测类Configuration的实例,进行测试。

可以见到,两个测试方法之间拥有大量的重复代码。用于创建被测类实例和准备测试数据。

下一节我们通过"生命周期方法"消除这些重复。

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

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