Tom*_*wor 5 java spring unit-testing spring-data-jpa
我正在尝试对我的服务类进行单元测试,它看起来与此类似:
@Service
public class SomeQueryService {
private final SomeRepository repository;
public SomeQueryService(SomeRepository repository) {
this.repository = repository;
}
public void doSomething() {
// code doing some magic
}
}
Run Code Online (Sandbox Code Playgroud)
SomeRepository是简单的存储库接口扩展JpaRepository接口。
我想做的是对该服务进行单元测试以验证它是否正常工作。
我不想使用mockito来模拟存储库行为,我想要一些内存中的实现(在列表或地图上)来模仿数据库行为。
Spring提供了这样的假实现吗?
我想避免自己对此类存储库进行存根实现,因为我将在许多其他地方使用此类测试。
您所指的测试类型称为“集成测试”或“端到端测试”,因为与仅测试一种方法的单元测试相比,它测试整个应用程序或其中的很大一部分。
https://www.guru99.com/unit-test-vs-integration-test.html
您不应该对您的存储库进行单元测试,因为它们已经经过 Spring 团队的充分测试。
解决方案:
您可以创建一个使用 Spring Boot 启动整个 spring 容器的测试:
只需在测试文件夹中创建一个类并用以下注释对其进行注释:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTestClass {
@Test
public void test() {
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用 H2 配置嵌入式数据库,以便您的测试不使用生产数据库,只需遵循 Spring Boot 数据库初始化文档即可。
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html
附言。您还可以在测试类上使用以下注释创建特定的配置文件:
@ActiveProfiles("test")