Spring是否提供JpaRepositories的存根实现?

时间:2018-04-12 07:34:20

标签: java spring unit-testing spring-data-jpa

我正在尝试对我看起来类似的Service类进行单元测试:

   @Service
   public class SomeQueryService {

    private final SomeRepository repository;

    public SomeQueryService(SomeRepository repository) {
        this.repository = repository;
    }

    public void doSomething() {
        // code doing some magic
    }
}

SomeRepository是扩展JpaRepository接口的简单存储库接口。

我想要做的是对此服务进行单元测试以验证它是否正常工作。

我不想使用mockito来模拟存储库行为,我希望有一些模拟数据库行为的内存实现(在列表或映射上)。

Spring是否提供了这样的虚假实现?

我想避免自己做Stub实现这样的存储库,因为我将在许多其他地方使用这样的测试。

2 个答案:

答案 0 :(得分:0)

您所指的测试类型称为“集成测试”或“端到端测试”,因为与仅测试一种方法的单元测试相比,它测试整个应用程序或其中的大部分。

https://www.guru99.com/unit-test-vs-integration-test.html

您不应对您的存储库进行单元测试,因为它们已经过春季团队的良好测试。

<强>解决方案:

您可以使用Spring Boot创建一个启动整个spring容器的测试:

只需在测试文件夹中创建一个类,然后使用:

进行注释
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTestClass {

  @Test
     public void test() {
  }

}

然后,您可以使用H2配置嵌入式数据库,以便您的测试不使用生产数据库,只需按照Spring Boot Database Initialization文档进行操作即可。

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

PS。您还可以在测试类上使用以下注释创建特定的配置文件:

@ActiveProfiles("test")

答案 1 :(得分:0)

没有Spring Data不提供该接口的虚假实现。

您必须自己创建或使用像Mockito这样的模拟框架。