用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