【发布时间】:2019-07-04 18:51:36
【问题描述】:
我是 mockito 新手,需要一些帮助,可能是一些关于如何模拟 Rest Template 的 getForEntity 和 postForEntity 方法的示例。下面是我想通过模拟 getForEntity 方法来编写 Junit 测试用例的代码。
SomeService.java
class SomeService
{
//some private, static, final data members
public Map getService(String sNo, String uId, String en)
{
ResponseEntity <Map> response = new
RestTemplate().getForEntity("https://someurl.com/someService",
Map.class);
Map body = response.getBody();
//do something
HttpEntity<?> request = new HttpEntity <>(payLoad, headers);
//payload is Hash Map and headers is a LinkedMultiValueMap
ResponseEntity <Map> response = new RestTemplate().postForEntity(url,
request, headers);
return response.getBody();
}
}
我尝试过使用@Mock 和@InjectMocks 做一些事情。
TestSomeService.java
@RunWith(MockitoJunitRunner.class)
class TestSomeService
{
@Mock
RestTemplate restTemplate;
@InjectMocks
SomeService ser;
/*Some data members*/
@Before
{
HttpEntity <?> request = new HttpEntity<>(reqPayload, headers);
Mockito.when(restTemplate.getForEntity("theUrl",
Map.class)).thenReturn(new ResponseEntity <Map>(someMap,
HttpStatus.OK));
Mockito.when(restTemplate.postForEntity("anotherUrl", request,
Map.class)).thenReturn(new ResponseEntity <Map>(expectedMap,
HttpStatus.OK));
}
@Test
public void testGetService()
{
Map <String, Object> result = ser.getService("123", "abc", "QA");
}
}
【问题讨论】:
-
那有什么问题呢?什么不工作?另外,你给
MockitoAnnotations.initMocks(this)打过电话吗? -
问题是它没有被嘲笑。我没有得到我期待的答案。它每次都给出不同的输出。
-
如果你能给出一些关于如何模拟它的示例代码,那将会很有帮助。
标签: java mockito junit4 resttemplate