@Mock
我认为您应该能够通过在您的服务实例上RestTemplate
使用 Mockito注释来实现您想要的,@InjectMocks
而不必使用任何包装器RestTemplate
。
所以我建议你的 Test 类看起来像下面这样:
@Inject
private WebApplicationContext wac;
/* Inject your service implementation from your Spring ApplicationContext*/
@InjectMocks
@Inject
private MyService myService;
/* This Mock RestTemplate will be injected into your service instance by Mockito */
@Mock
private RestTemplate restTemplate;
@BeforeMethod
public void setup() throws Exception
{
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
.addFilters(this.springSecurityFilterChain).build();
}
这里实际发生了什么:
- 你像往常一样构建你的 ApplicationContext
- 您将 ApplicationContext 中对服务实现的引用注入到您的测试中
- 您使用
@Mock
Mockito 的实现RestTemplate
在测试的上下文中创建一个 Mock 实例
- 将
@InjectMocks
注释放在您的 MyService 实现上对 Mockito 说“在可能的情况下将 Mocks 注入此实例”
- Mockito 将 Mock
RestTemplate
注入到您的服务实例中
然后,您可以继续正常编写测试,然后使用 Mockito 模拟操作RestTemplate
并验证它们,例如
@Test
public void testServiceUsesRestTemplateProperly()
{
Mockito.when(restTemplate.getForObject("http://example.com", String.class)).thenReturn("hello world");
String s = myService.doSomething();
Assert.assertEquals("hello world", s);
Mockito.verify(restTemplate).getForObject("http://example.com", String.class);
}
(抱歉,如果我在这里混合 jUnit 语法)
值得阅读的更多信息:
- InjectMocks 文档