如何测试 Spring Data Rest @RepositoryRestResource?

Posted

技术标签:

【中文标题】如何测试 Spring Data Rest @RepositoryRestResource?【英文标题】:How do I test a Spring Data Rest @RepositoryRestResource? 【发布时间】:2016-04-17 21:10:59 【问题描述】:

我试图为使用 Spring Data Rest 构建的 REST API 设置单元测试。我有一个这样的存储库:

@RepositoryRestResource
public interface BeerRepository extends JpaRepository<Beer, Long> 

我的测试如下所示:

public class BeerRestTest extends AbstractRestTest 

    @Autowired
    @Qualifier("beerRepositoryMock")
    protected BeerRepository beerRepositoryMock;

    @Before
    public void setUp() 
        super.setUp();
        Mockito.reset(beerRepositoryMock);
    

    @Test
    public void testGetBeer() throws Exception 
        Beer beer = new Beer();
        beer.setId(1L);
        beer.setName("Duff");

        when(beerRepositoryMock.findOne(1L)).thenReturn(beer);

        mockMvc.perform(get("/api/beers/id", 1L))
                .andDo(print())
                .andExpect(status().isOk());

        verify(beerRepositoryMock, times(1)).findOne(1L);
        verifyNoMoreInteractions(beerRepositoryMock);
    


spring data rest 配置如下:

public class RestConfig extends RepositoryRestMvcConfiguration 

    @Bean
    public RepositoryRestConfigurer repositoryRestConfigurer() 
        return new RepositoryRestConfigurerAdapter() 
            @Override
            public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) 
                config.setBasePath("/api");
            
        ;
    


最后是日志

2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property/propertyId],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property],methods=[DELETE],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.deletePropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReferenceCompact(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property],methods=[PATCH || PUT || POST],consumes=[application/json || application/x-spring-data-compact+json || text/uri-list],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.createPropertyReference(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.http.HttpMethod,org.springframework.hateoas.Resources<java.lang.Object>,java.io.Serializable,java.lang.String) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id/property/propertyId],methods=[DELETE],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.deletePropertyReferenceId(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,java.lang.String,java.lang.String) throws java.lang.Exception
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository],methods=[OPTIONS],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.optionsForCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository],methods=[HEAD],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.headCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable) throws org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.hateoas.Resources<?> org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository],methods=[GET],produces=[application/x-spring-data-compact+json || text/uri-list]" onto public org.springframework.hateoas.Resources<?> org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResourceCompact(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository],methods=[POST],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.postCollectionResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[OPTIONS],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.optionsForItemResource(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[HEAD],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.headForItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler) throws org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.Resource<?>> org.springframework.data.rest.webmvc.RepositoryEntityController.getItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[PUT],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<? extends org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.putItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.data.rest.webmvc.support.ETag,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[PATCH],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.RepositoryEntityController.patchItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.data.rest.webmvc.PersistentEntityResource,java.io.Serializable,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler,org.springframework.data.rest.webmvc.support.ETag,java.lang.String) throws org.springframework.web.HttpRequestMethodNotSupportedException,org.springframework.data.rest.webmvc.ResourceNotFoundException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/id],methods=[DELETE],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryEntityController.deleteItemResource(org.springframework.data.rest.webmvc.RootResourceInformation,java.io.Serializable,org.springframework.data.rest.webmvc.support.ETag) throws org.springframework.data.rest.webmvc.ResourceNotFoundException,org.springframework.web.HttpRequestMethodNotSupportedException
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/ || /api],methods=[HEAD],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<?> org.springframework.data.rest.webmvc.RepositoryController.headForRepositories()
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/ || /api],methods=[OPTIONS],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositoryController.optionsForRepositories()
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/ || /api],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.RepositoryLinksResource> org.springframework.data.rest.webmvc.RepositoryController.listRepositories()
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search],methods=[OPTIONS],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositorySearchController.optionsForSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search],methods=[HEAD],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.RepositorySearchController.headForSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.data.rest.webmvc.RepositorySearchesResource org.springframework.data.rest.webmvc.RepositorySearchController.listSearches(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search/search],methods=[GET],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.data.rest.webmvc.RepositorySearchController.executeSearch(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.util.MultiValueMap<java.lang.String, java.lang.Object>,java.lang.String,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search/search],methods=[GET],produces=[application/x-spring-data-compact+json]" onto public org.springframework.hateoas.ResourceSupport org.springframework.data.rest.webmvc.RepositorySearchController.executeSearchCompact(org.springframework.data.rest.webmvc.RootResourceInformation,org.springframework.util.MultiValueMap<java.lang.String, java.lang.Object>,java.lang.String,java.lang.String,org.springframework.data.rest.webmvc.support.DefaultedPageable,org.springframework.data.domain.Sort,org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search/search],methods=[OPTIONS],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.data.rest.webmvc.RepositorySearchController.optionsForSearch(org.springframework.data.rest.webmvc.RootResourceInformation,java.lang.String)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.RepositoryRestHandlerMapping - Mapped "[/api/repository/search/search],methods=[HEAD],produces=[application/hal+json || application/json || application/*+json;charset=UTF-8]" onto public org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.data.rest.webmvc.RepositorySearchController.headForSearch(org.springframework.data.rest.webmvc.RootResourceInformation,java.lang.String)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.BasePathAwareHandlerMapping - Mapped "[/api/profile/repository],methods=[GET],produces=[application/schema+json]" onto public org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.json.JsonSchema> org.springframework.data.rest.webmvc.RepositorySchemaController.schema(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.BasePathAwareHandlerMapping - Mapped "[/api/profile/repository],methods=[OPTIONS],produces=[application/alps+json]" onto org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.alps.AlpsController.alpsOptions()
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.BasePathAwareHandlerMapping - Mapped "[/api/profile/repository],methods=[GET],produces=[application/alps+json || */*]" onto org.springframework.http.HttpEntity<org.springframework.data.rest.webmvc.RootResourceInformation> org.springframework.data.rest.webmvc.alps.AlpsController.descriptor(org.springframework.data.rest.webmvc.RootResourceInformation)
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.BasePathAwareHandlerMapping - Mapped "[/api/profile],methods=[OPTIONS]" onto public org.springframework.http.HttpEntity<?> org.springframework.data.rest.webmvc.ProfileController.profileOptions()
2016-01-12 23:33:10 [main] INFO  o.s.d.r.w.BasePathAwareHandlerMapping - Mapped "[/api/profile],methods=[GET]" onto org.springframework.http.HttpEntity<org.springframework.hateoas.ResourceSupport> org.springframework.data.rest.webmvc.ProfileController.listAllFormsOfMetadata()
2016-01-12 23:33:11 [main] WARN  o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/api/beers/15] in DispatcherServlet with name ''

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /api/beers/1
       Parameters = 
          Headers = 

Handler:
             Type = null

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 404
    Error message = null
          Headers = 
     Content type = null
             Body = 
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

java.lang.AssertionError: Status 
Expected :200
Actual   :404
 <Click to see difference>
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
    at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:89)
    at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:655)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
    at com.beerway.server.rest.BeerRestTest.testGetBeer(BeerRestTest.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

编辑:beerRepositoryMock

@Bean(name = "beerRepositoryMock")
public BeerRepository beerRepositoryMock() 
    return Mockito.mock(BeerRepository.class);

谢谢

【问题讨论】:

您能否展示一下您是如何创建 bean beerRepositoryMock 的。 @MathiasDpunkt 完成 :) 【参考方案1】:

查看 spring data rest 查找存储库的方式,我看不到让 spring data rest 使用您的模拟存储库的方法。

通过您的配置,您最终会得到两个 BeerRepository bean - 模拟和真正的一个 - spring data rest 将通过 bean 名称 beerRepository 查找此存储库。

所以我尝试了这样的事情:

@Bean
public BeerRepository beerRepository() 
    return Mockito.mock(BeerRepository.class);

但我的 bean 总是被真正的存储库 bean 覆盖。

我正在使用内存数据库在我的测试中插入我的测试数据。这很好用,对您来说是一个简单的选择。

【讨论】:

那更像是一个集成测试,对吧?我已经这样做了(h2 数据库),但我还想对存储库进行单元测试(我不知道这是否有用) 一位 spring-data 维护者提供了一个非常有用的答案 - 他解释了为什么测试 repos 不太有用:***.com/a/23442457/5371736 在同一个问题中也有一个答案指向一个声称支持测试回购的实现 - 但我没有尝试过。 ***.com/a/28643025/5371736 @MatiasElorriaga 这个问题已经很老了,但总的来说,您不会以任何有意义的方式对存储库进行单元测试。除非您提供了具体的存储库实现,否则实际的存储库实现由 Spring Data REST 提供,因此您将测试他们的代码。【参考方案2】:

由于@RepositoryRestResource 使REST 存储库成为一个spring bean,您可以使用Spring 注解:

@MockBean
RestRepository mockedRepository

然后使用mockito的

when(...mockedRepository.someMethod(any())).thenReturn(value)

【讨论】:

如何测试 Spring Data Rest 创建的控制器?

以上是关于如何测试 Spring Data Rest @RepositoryRestResource?的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-rest 集成测试因简单的 json 请求而失败

Spring Data Rest 不能做集成测试?

如何在 Spring-Data-Rest 中实现细粒度的访问控制?

您如何保护 Spring Boot / Spring-Data Rest 以便用户只能访问他自己的实体

如何配置 Spring-Data-Rest 以仅返回登录用户拥有的数据

如何将 spring-data-rest 与 spring websocket 混合到一个实现中