【发布时间】:2020-06-05 09:41:06
【问题描述】:
我有一个名为PostService 的服务,它有一个名为connectionManager Autowired 的实例变量。
在connectionManager 内部有一个名为restTemplate Autowired. 的实例变量
在配置java文件中,RestTemplate的对象是用一些逻辑创建的。
当我围绕它编写一个测试用例,并创建一个带有预期 URL 和 post 方法的 MockRestServiceServer 时,作为回报,预期会有一些正文的响应。当我执行测试用例时,我没有收到来自 mockedRestServiceServer 的模拟响应。
我能感觉到,这是因为在测试执行期间,创建了一个真实的 rest 模板对象,并且模拟服务器不用于发送模拟响应。
谁能帮助我,如何克服这个问题?
class PostServie {
@Autowired
private ConnectionManager connectionManager;
public void postMessage(String msg) {
// some logic
}
}
@Component
class ConnectionManager {
@Autowired
private RestTemplate restTemplate;
public String getToken(){
ResponseEntity<String> response = this.restTemplate.postForEntity(url, request, String.class);
//returns response.body() in string format
}
}
@Configuration
class Configuration {
@Bean
public RestTemplate getRestTemplate(){
// some logic and returns object of RestTemplate
}
}
@RunWith(SpringRunner.class)
class PostServiceTest {
@Autowired
private PostMessageService postMessageService;
@Resource(name="authServerRestTemplet")
private RestTemplate authServerRestTemplet;
private MockRestServiceServer mockedAuthServerRestTemplet;
private final String requestToAuthServer ="grant_type=client_credentials&client_id=ceapiClientId";
@Before
public void setUp() {
mockedAuthServerRestTemplet =
MockRestServiceServer.createServer(authServerRestTemplet);
}
@Test
public void postServeiceSuccess () {
mockedAuthServerRestTemplet.expect(requestTo(ACCESS_TOKEN_URI)).andExpect(content().string(requestToAuthServer)).andExpect(method(HttpMethod.POST)).andRespond(withSuccess("{abc : 'abc'}", MediaType.APPLICATION_JSON));
postMessageService.postMessage(jsonMessage);
}
}
}
【问题讨论】:
-
你能添加测试用例并重新格式化问题,这样更清楚吗?这段代码真的很混乱。
标签: java spring junit resttemplate spy