der*_*itz 5 integration-testing spring-boot
我需要针对 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");
}
}
Run Code Online (Sandbox Code Playgroud)
我需要@RestClientTest一个 RestTemplateBuilder 的 bean。
有没有办法配置@RestClientTest使用真实服务器(类似于@DataJpaTest我可以配置不使用 h2 的地方)?
@RestTemplateTest为您提供预配置RestTemplateBuilder和MockRestServiceServer.
1.您可以@Autowired MockRestServiceServer模拟预期的 HTTP 调用。
2.删除自动配置:
@RestClientTest(excludeAutoConfiguration = MockRestServiceServerAutoConfiguration.class)
Run Code Online (Sandbox Code Playgroud)
但这使得测试有点慢。也许有一种方法可以优化它。
3.另一方面,您可以删除@RestClientTest并在测试配置文件中创建一个RestTemplateBuilder. 像这样的东西:
@TestConfiguration
public class TestConfig {
@Bean
public RestTemplateBuilder getRestTemplateBuilder() {
return new RestTemplateBuilder();
}
}
Run Code Online (Sandbox Code Playgroud)
之后,在您的导入中添加此配置文件:
@Import(value = { TpzConfig.class, TpzServiceRestImpl.class,
ManufacturingPlantPhPmMapperImpl.class, ProductHierarchyMapperImpl.class,
PlantMapperImpl.class, TestConfig.class })
Run Code Online (Sandbox Code Playgroud)
而且你的考试成绩应该很好。
| 归档时间: |
|
| 查看次数: |
1443 次 |
| 最近记录: |