【发布时间】:2021-01-06 21:21:36
【问题描述】:
我想使用 MockRestServiceServer 测试来自我的服务的传出 HTTP 调用。我使用以下代码让它工作:
@SpringBootTest
class CommentFetcherTest {
@Autowired
RestTemplate restTemplate;
@Autowired
CommentFetcher commentFetcher;
@Test
public void shouldCallExternalService(){
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer.expect(ExpectedCount.once(), requestTo("/test/endpoint")).andExpect(method(HttpMethod.GET));
//when
commentFetcher.fetchData();
mockServer.verify();
}
}
但是我遇到的问题是 RestTemplate 是套件中所有测试之间共享的 bean,这使得无法进一步运行应该调用外部服务的集成测试。这导致:
java.lang.AssertionError: No further requests expected
如何仅将MockRestServiceServer 用于测试子集?
我无法通过@Autowired 摆脱依赖注入并在测试中构建我的服务,例如
RestTemplate restTemplate = new RestTemplate();
CommentFetcher commentFetcher = new CommentFetcher(restTemplate);
因为这不会从application.properties 读取我的服务正常运行所必需的属性。
【问题讨论】:
-
不确定我是否完全理解这里的大局,但是您是否可以在集成测试课程中自动连接
TestRestTemplate? BR
标签: spring-boot spring-test mockrestserviceserver