如何为Resttemplate交换方法编写mockito junit

Jav*_*ing 14 junit spring mockito resttemplate

如何为以下方法编写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);
}
Run Code Online (Sandbox Code Playgroud)

请帮我怎么写.

小智 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());
    }
 }
Run Code Online (Sandbox Code Playgroud)


Mar*_*tek 5

我认为,在这种情况下,最方便,最合适的做法(这是客户端使用REST测试RestTemplate)将MockRestServiceServer提供弹簧试验框架。


ava*_*sen 0

这取决于你想要什么。

使用模拟的一种方法是使execute方法的调用更容易。为此,您可以使用实际参数的模拟版本,例如HttpMethodHttpEntity。如果底层exchange方法需要这些参数的某些行为,您可能需要使用mockito的when...thenReturn方法将其存根。

一旦设置了这些模拟参数以便您可以调用您的execute方法,您将需要检查其结果是否正确。

为了检查返回值,您可以使用传统的 JUnit 断言。

此外,您可能想要检查与模拟对象的某些交互是否确实发生。为此,您可以使用mockito的verify方法来检查,例如,某些HttpEntity方法是否确实被调用。

从技术上讲,您还可以验证其余模板的exchange方法是否被调用。为此,您需要模拟 RestTemplate 并将模拟注入到正在测试的类中。然后你可以使用mockitoverfiy来检查是否exchange以正确的方式调用。这通常是明智的做法,特别是当您的被测类中有更多方法需要测试时。对于目前的execute方法来说,这似乎有点矫枉过正。