Spring Data Rest 不能做集成测试?

Posted

技术标签:

【中文标题】Spring Data Rest 不能做集成测试?【英文标题】:Spring Data Rest cannot do Integration test? 【发布时间】:2020-04-04 07:01:27 【问题描述】:

我尝试过同时使用 MockMVC 和 TestRestTemplate。在这两种情况下,返回的响应都是 404,但 API 端点在集成测试之外工作(当我自己运行 spring 应用程序时)。

是否有人有一个有效的示例应用程序,该应用程序对使用 Spring Data Rest 的生成的控制器进行了有效的集成测试?

我还能够针对我自己的控制器(非 SDR 类型)编写常规集成测试

测试代码:

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyTest 

    @Autowired
    private TestRestTemplate testRestTemplate;

    @Test
    public void testApi() 
        String settings = testRestTemplate
                .getForObject("/api/v1/orders", String.class);
        System.out.println(settings);
    


回购:

@RepositoryRestResource(excerptProjection = OrderSummaryProjection.class)
public interface OrderRepository extends JpaRepository<Order, Long> 

好的,我发现了问题,但我不知道答案应该是什么:

我在 application.properties 中设置了 spring.data.rest.basePath。

但我认为在您运行集成测试时不会读取该文件。我该如何解决?

【问题讨论】:

您的代码 sn-p 将有助于回答问题 @Smile 找到了问题,但没有答案,请参阅编辑 【参考方案1】:

我目前不测试 Spring Data Rest 端点,但如果我要这样做,我会使用经典的集成测试方法测试接口:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DummyIT 

    @Autowired
    private SettingsRepository settingsRepository;

    @Test
    public void testApi() 
        List<Settings> settings = settingsRepository.findAll();
        assertNotNull(settings);
    


我还测试了端到端测试,它也有效,它只是返回丑陋的 "_embedded" : "settings" : [ ... ] , ... 所以它是可行的,但它是不漂亮:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DummyTest 

    @Autowired
    private TestRestTemplate testRestTemplate;

    @Test
    public void testApi() 
        String settings = testRestTemplate
                .getForObject("/api/settings", String.class);
        System.out.println(settings);
    


【讨论】:

我找到了问题,但没有答案,请参阅编辑

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

Spring Data REST API集成SpringfoxSwagger

Spring Data REST 的 QueryDSL 集成,用于查询实体中集合映射的子属性

Spring Data REST 的 QueryDSL 集成可以用来执行更复杂的查询吗?

如何测试 Spring Data Rest @RepositoryRestResource?

Java - Spring boot - 集成测试 - TestEntityManager 没有被注入

在 SpringBoot 中使用 Testcontainers 进行 Spring Data Elasticsearch 集成测试