如何为以下方法编写mockito junit:
@Autowired
RestTemplate restTemplate;
ResponseEntity<?> execute(final String url, HttpMethod httpMethod,
HttpEntity<?> entityRequest,
String.class,
Map<String, String> urlVariables){
restTemplate.exchange(url, httpMethod, entityRequest, responseType, urlVariables);
}
请帮我怎么写。
答案 0 :(得分:17)
@RunWith(MockitoJUnitRunner.class)
public class ToTestTest {
@InjectMocks
private YourClass toTest;
@Mock
private RestTemplate template;
@Test
public void test() {
toTest.execute(Mockito.anyString(), Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any());
Mockito.verify(template, Mockito.times(1))
.exchange(Mockito.anyString(),
Mockito.<HttpMethod> any(),
Mockito.<HttpEntity<?>> any(),
Mockito.<Class<?>> any(),
Mockito.<String, String> anyMap());
}
}
答案 1 :(得分:3)
我认为在这种情况下最方便和最合适的方法(使用RestTemplate
进行客户端REST测试)将由MockRestServiceServer
框架提供Spring Testing。
答案 2 :(得分:0)
这取决于你想要什么。
使用模拟的一种方法是更容易调用execute
方法。为此,您可以使用实际参数的模拟版本,例如HttpMethod
和HttpEntity
。如果基础exchange
方法需要这些参数中的某些行为,您可能需要使用mockito的when
... thenReturn
方法将其存入。
设置这些模拟参数后,您可以调用execute
方法,您需要检查其结果是否正确。
要检查返回的值,可以使用传统的JUnit断言。
此外,您可能希望检查实际发生的模拟对象的某些交互。为此,您可以使用mockito的verify
方法来检查,例如,实际调用了一些HttpEntity
方法。
从技术上讲,您还可以验证是否调用了其余模板的exchange
方法。为此,您需要模拟RestTemplate并在您测试的类中注入模拟。然后,您可以使用mockito&#39; verfiy
检查exchange
是否以正确的方式调用。这通常是明智之举,特别是如果有更多方法可以在您的被测试阶段进行测试。对于目前的execute
方法,它看起来有点矫枉过正。
答案 3 :(得分:0)
我曾经遇到过这样的错误。我找到了更可靠的解决方案。我也提到了对我有用的导入声明。下面的代码完美地模拟了其余模板。
import org.mockito.Matchers;
import static org.mockito.Matchers.any;
HttpHeaders headers = new Headers();
headers.setExpires(10000L);
ResponseEntity<String> responseEntity = new ResponseEntity<>("dummyString", headers, HttpStatus.OK);
when(restTemplate.exchange( Matchers.anyString(),
Matchers.any(HttpMethod.class),
Matchers.<HttpEntity<?>> any(),
Matchers.<Class<String>> any())).thenReturn(responseEntity);
这里'responseEntity'值不会为空,我们可以使用它来完美地声明一条语句。