Spring Boot @RestClientTes如何在真实服务器上进行测试(不是模拟)

时间:2019-10-29 14:02:48

标签: spring-boot integration-testing

我需要针对REST API创建集成测试。我的服务使用Resttemplate作为HTTP客户端。客户端代码是从swagger文件生成的。

运行测试会产生错误java.lang.AssertionError: No further requests expected: HTTP GET

似乎该测试正在针对模拟服务器运行。如何让测试在真实服务器上运行?

这是我当前的测试设置(想要切出最小的测试框架以获得快速测试-引导整个上下文太慢了):

@RunWith(SpringRunner.class)
@Import(value = { TpzConfig.class, TpzServiceRestImpl.class, ManufacturingPlantPhPmMapperImpl.class,
        ProductHierarchyMapperImpl.class, PlantMapperImpl.class })
@ActiveProfiles(profiles = { "tpz" })
@RestClientTest
public class TpzServiceRestImplTest {

    @Autowired
    private TpzService to;

    @MockBean
    private ProductionPlantService ppService;

    @MockBean
    private ProductHierarchyService phService;

    @Test
    public void test() {
        List<ProductManufacturer> pmByProductHierarchy = to.pmByProductHierarchy("001100909100100388");

    }

}

我需要@RestClientTest才能拥有RestTemplateBuilder bean。

是否可以将@RestClientTest配置为使用真实服务器(类似于@DataJpaTest,我可以配置为不使用h2)?

1 个答案:

答案 0 :(得分:2)

我不明白为什么要在集成测试中使用真实服务器。这闻起来很不好。有一名开发人员,我想在没有Internet连接(在飞行模式下)的计算机上运行测试。但是,这就是我为您准备的。 @RestTemplateTest为您提供了预先配置的RestTemplateBuilderMockRestServiceServer

1。话虽如此,您可以@Autowired MockRestServiceServer并模拟预期的HTTP调用。


2。删除自动配置:

@RestClientTest(excludeAutoConfiguration = MockRestServiceServerAutoConfiguration.class)

但这会使测试变慢。.也许有一种方法可以对其进行优化。


3。另一方面,您可以删除@RestClientTest,然后在测试配置文件中创建一个RestTemplateBuilder的bean。像这样的东西:

@TestConfiguration
public class TestConfig {
    @Bean
    public RestTemplateBuilder getRestTemplateBuilder() {
        return new RestTemplateBuilder();
    }
}

此后,将此配置文件添加到您的导入中:

@Import(value = { TpzConfig.class, TpzServiceRestImpl.class, 
ManufacturingPlantPhPmMapperImpl.class, ProductHierarchyMapperImpl.class, 
PlantMapperImpl.class, TestConfig.class })

而且你应该对自己的考试好。