我正在编写一个JUnit测试用例,该测试用例测试助手类中的方法。该方法使用REST调用外部应用程序,在JUnit测试中我试图模拟这个调用。
helper方法使用Spring的RestTemplate进行REST调用。
在我的测试中,我创建了一个模拟REST服务器和一个模拟REST模板,并将它们实例化如下:
@Before
public void setUp() throws Exception {
mockServer = MockRestServiceServer.createServer(helperClass.getRestTemplate());
}然后启动模拟服务器,以便在助手方法进行REST调用时返回适当的响应:
// response is some XML in a String
mockServer
.expect(MockRestRequestMatchers.requestTo(new URI(myURL)))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_XML)
.body(response));当我运行我的测试时,helper方法从它发出的REST调用中接收一个空响应,而测试失败。
该助手创建的REST URL具有查询参数,如下所示:"http://server:port/application/resource?queryparam1=value1&queryparam2=value2“。
我尝试将URL ("http://server:port/application/resource")与"myURL“变量中的查询参数一起放置(以获得匹配以便返回响应),但无法让模拟服务器返回任何内容。
我尝试过搜索这类代码的示例,但是还没有找到类似于我的场景的任何东西。
春季版本4.1.7。
提前感谢您的帮助。
发布于 2016-06-13 07:11:23
创建MockRestServiceServer实例时,应使用生产代码使用的现有RestTemplate实例。因此,尝试将RestTemplate注入到您的测试中,并在调用MockRestServiceServer.createServer时使用它--不要在测试中创建新的RestTemplate。
发布于 2016-06-13 07:48:28
似乎您正在尝试测试rest-客户机,rest-服务器应该在其他地方进行测试。您正在使用RestTemplate ->调用该服务。然后,试图嘲笑RestTemplate及其调用的结果。
@Mock
RestTemplate restTemplateMock;和测试课程下的服务
@InjectMocks
Service service;比方说,服务有一个方法需要测试,如
public void filterData() {
MyResponseModel response = restTemplate.getForObject(serviceURL, MyResponseModel.class);
// further processing with response
}然后,要测试filterData方法,需要模拟来自restTemplate调用的响应,如
mockResponseModel = createMockResponse();
Mockito.when(restTemplateMock.getForObject(serviceURL, MyResponseModel.class)).thenReturn(mockResponseModel);
service.filterData();
//Other assert/verify,... go here发布于 2019-07-25 05:45:57
您可以创建RestTemplate的新实例,但是必须在createServer方法中传递它,如下所示:
private RestTemplate restTemplate = new RestTemplate();
@BeforeEach
public void setUp() {
MockitoAnnotations.initMocks(this);
mockServer = MockRestServiceServer.createServer(restTemplate);
client.setRestTemplate(restTemplate);
}https://stackoverflow.com/questions/37781982
复制相似问题