如何将 MockMvc 与模拟存储库一起使用?
How to use MockMvc with mocked repository?
Conext
我发现了这个问题here但我的问题不一样
所以我们使用 Katharsis Controller
和 Spring Data Rest
。
整个应用程序我们只有 1 个控制器,然后请求将发送到 Spring Data Rest
个存储库 classes。
我们想使用 Spring Restdoc
生成文档,这需要我们用 MockMvc
编写单元测试。
但是当使用 Mockmvc
时,它会启动容器并需要设置数据源。
如果我们使用 standaloneSetup()
并传递模拟存储库 class,那么 MockMvc
将不会加载 Katharsis Controller
,因此请求不会'到达那个存储库。
我知道我们可以创建一个内存数据库,但是我们的项目很大,数据库需要创建大量的表,我们希望避免这种情况,因为这些测试是为了文档目的.
问题
有什么方法可以做到这一点并且只模拟目标存储库 class?
备注
存储库是指 Spring DataRest
中的 CrudRepository
界面。
正如 Andy Wilkinson 所建议的,您可以考虑创建单元测试,在其中您自己将 bean 连接在一起并使用 MokMvc 独立设置。
如果您想创建集成测试并创建 Spring 上下文,可以使用 @Primary
、[=11= 来伪造 Spring bean ] 和 @Profile
注释。 I wrote a blog post with GitHub example how to do it。您只需要将此方法与基于 WebApplicationContext
的 MockMvc
设置结合起来。它运行没有问题,我以前写过这样的测试。
Conext
我发现了这个问题here但我的问题不一样
所以我们使用
Katharsis Controller
和Spring Data Rest
。整个应用程序我们只有 1 个控制器,然后请求将发送到
Spring Data Rest
个存储库 classes。我们想使用
Spring Restdoc
生成文档,这需要我们用MockMvc
编写单元测试。但是当使用
Mockmvc
时,它会启动容器并需要设置数据源。如果我们使用
standaloneSetup()
并传递模拟存储库 class,那么MockMvc
将不会加载Katharsis Controller
,因此请求不会'到达那个存储库。我知道我们可以创建一个内存数据库,但是我们的项目很大,数据库需要创建大量的表,我们希望避免这种情况,因为这些测试是为了文档目的.
问题
有什么方法可以做到这一点并且只模拟目标存储库 class?
备注
存储库是指 Spring DataRest
中的 CrudRepository
界面。
正如 Andy Wilkinson 所建议的,您可以考虑创建单元测试,在其中您自己将 bean 连接在一起并使用 MokMvc 独立设置。
如果您想创建集成测试并创建 Spring 上下文,可以使用
@Primary
、[=11= 来伪造 Spring bean ] 和@Profile
注释。 I wrote a blog post with GitHub example how to do it。您只需要将此方法与基于WebApplicationContext
的MockMvc
设置结合起来。它运行没有问题,我以前写过这样的测试。