用SpringBoot进行小测试,JUnit5 × jMockit版本

首先

在使用SpringBoot进行测试时,有时候会遇到想要实现小型测试(Unit Test)的场景,但关于如何实现小型测试的文章很少见,所以我打算将此记录在自己的备忘录中。
注意:通常在搜索时会找到带有Spring测试相关依赖的解决方案,但在实现最小化的单元测试时这些依赖是不必要的。

阅读这篇文章可以发现以下几点。

    • SpringBootにおけるjMockitでのsmall testを導入する際の依存関係(pom.xmlの内容)

 

    DI(@Autowired)されているフィールドの扱い方などテストコードの基本的な書き方

小测验是一种

请参考相关文章。

覆盖范围的讨论

请参考相关文章。

使用JUnit5和jMockit进行小型测试。

在SpringBoot中引入jMockit进行small test时的依赖关系(pom.xml的内容)

如果在项目(包)管理工具中使用Maven,pom.xml将如下所示。
※省略了一些内容,但在进行小规模测试时,基本上不需要依赖于spring-boot-starter-test等。

<project xmlns="・・・">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>

    <properties>
        <junit-jupiter.version>5.7.1</junit-jupiter.version>
        <jmockit.version>1.49</jmockit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- jdbc, json, lombokなどなど -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jmockit</groupId>
            <artifactId>jmockit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

对于被DI(@Autowired)的字段的处理方式以及测试代码的基本编写方式等

首先,需要使用jMockit,在@ExtendWith注解中声明并继承JMockitExtension.class。
需要使用@Injectable注解将被Spring的依赖注入(@Autowired)的各个字段进行mock化。
此外,为了将它们注入到测试目标类中,需要在测试目标类中使用@Tested注解,并注入mock。
基本的实现如下:
※jMockit的使用方法和语法请参考这里。
※关于在Spring中使用jMockit,请参考这里。

// 省略
@ExtendWith(JMockitExtension.class)
class SampleTest {

  @Injectable
  private Hoge mockHoge;
  @Injectable               
  private Fuga mockFuga;

  @Tested
  private Sample testClass;

  @Test
  void testFoo() {
    mockGetHoge("hoge");
    assertEquals("hoge", testClass.foo());
  }

  private void mockGetHoge(String resultValue) {
    new Expectations() {
      {                                                         
        mockHoge.getHoge();                                                         
        result = resultValue;
      }
    };
  }
  // 省略
}

相关文章

    SpringBootでsmall test JUnit5 × Mockito ver

文献资料

    https://testing.googleblog.com/2010/12/test-sizes.html
广告
将在 10 秒后关闭
bannerAds