Bev*_*vor 11 java junit mocking mockito
不幸的是,Mockito文档缺乏详尽的信息,很难找到如何创建以下设置的正确方法.
我有一个应该测试的类"ResourceManager".该类实例化另一个类"JerseyClient",它有一个名为"get"的方法.我希望"ResourceManager" 不要调用真正的"JerseyClient",而是从它调用mock(或stub?)(我已经不清楚Mockito上下文中模拟和存根或模拟和间谍之间的区别).
我的尝试是@Mock(或@Spy?)JerseyClient,或者至少有一种方法:
@RunWith(MockitoJUnitRunner.class)
public class ResourceManagerTest
{
@Mock
private JerseyClient jerseyClient;
@Test
public void testResultHandling() throws JsonGenerationException, JsonMappingException, IOException, ResourceException
{
TestEntity testEntity = new TestEntity();
ResourceManager resourceManager = new ResourceManager();
testEntity.setGet(true);
testEntity.setTestAttribute("1stTest");
when(jerseyClient.get(anyString())).thenReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}");
// doReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}").when(jerseyClient).get(anyString());
TestEntity result = (TestEntity)resourceManager.execute(testEntity, TestEntity.class);
assertThat(result, is(notNullValue()));
assertThat(result.getMessage(), is("success"));
assertThat(result.getTestAttribute(), is("2ndTest"));
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我尝试模拟jerseyClient.get()方法以返回预定义的JSON字符串:
when(jerseyClient.get(anyString())).thenReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}");
Run Code Online (Sandbox Code Playgroud)
要么
doReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}").when(jerseyClient).get(anyString());
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用.这意味着调用了真正的JerseyClient.get方法,因为它尝试使用真正的JerseyClient发出HTTP请求.
解决方案是什么,我想在这做什么?它是在监视一个真实的对象还是嘲笑一个我想要模拟它的方法的对象,什么时候可以替换方法,只能在模拟上或只在间谍上?
我自己找到了答案.我需要补充一下
@InjectMocks
private ResourceManager resourceManager;
Run Code Online (Sandbox Code Playgroud)
然后我需要使用此实例运行测试:
@RunWith(MockitoJUnitRunner.class)
public class ResourceManagerTest
{
@Mock
private JerseyClient jerseyClient;
@InjectMocks
private ResourceManager resourceManager;
@Test
public void testResultHandling() throws JsonGenerationException, JsonMappingException, IOException, ResourceException
{
TestEntity testEntity = new TestEntity();
testEntity.setGet(true);
testEntity.setTestAttribute("1stTest");
when(jerseyClient.get(anyString())).thenReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}");
TestEntity result = (TestEntity)resourceManager.execute(testEntity, TestEntity.class);
assertThat(result, is(notNullValue()));
assertThat(result.getMessage(), is("success"));
assertThat(result.getTestAttribute(), is("2ndTest"));
}
}
Run Code Online (Sandbox Code Playgroud)
我也可以使用"doReturn ... when"模式.
| 归档时间: |
|
| 查看次数: |
11326 次 |
| 最近记录: |