Java 带Mockito的void方法的测试参数
是否可以使用Mockito测试作为参数传递给无效方法的实例的值Java 带Mockito的void方法的测试参数,java,junit,mockito,Java,Junit,Mockito,是否可以使用Mockito测试作为参数传递给无效方法的实例的值 public String foo() { Object o = new ObjectX(); o.setField("hi"); someDao.boo(o); return "response"; } boo无效,我想测试foo是否将字段设置为hi已更新 这就是JB在我的评论中提出的建议 @RunWith(MockitoJUnitRunner.class) public class BarTes
public String foo() {
Object o = new ObjectX();
o.setField("hi");
someDao.boo(o);
return "response";
}
boo无效,我想测试foo是否将字段设置为hi已更新
这就是JB在我的评论中提出的建议
@RunWith(MockitoJUnitRunner.class)
public class BarTest
{
@Mock
private SomeDao someDao;
@InjectMocks
private Bar bar;
@Before
public void initMocks()
{
MockitoAnnotations.initMocks(this);
}
@Test
public void testFoo()
{
Mockito.doAnswer(new Answer<Object>()
{
@Override
public Object answer(InvocationOnMock invocation) throws Throwable
{
ObjectX x = (ObjectX) invocation.getArguments()[0];
Assert.assertEquals("hi", x.getField());
return null;
}
}).when(someDao).boo(Mockito.any(ObjectX.class));
Assert.assertEquals("response", bar.foo());
}
}
测试用例
@Test
public void testFoo()
{
ObjectX mock = Mockito.mock(ObjectX.class);
Assert.assertEquals("response", foo(mock));
Mockito.verify(mock, Mockito.times(1)).setField(Mockito.eq("hi"));
}
澄清你的问题。显示代码。可能在验证调用时使用ArgumentCaptor。由于o被声明为对象,因此它将无法访问方法设置字段,我认为它位于ObjectX中。我同意@Brice。没有必要在这里发布重复的答案。当然有可能。需要模拟和注入的是someDao。这是因为ObjectX是作为参数传递的。在我的例子中,它不是一个参数
@Test
public void testFoo()
{
ObjectX mock = Mockito.mock(ObjectX.class);
Assert.assertEquals("response", foo(mock));
Mockito.verify(mock, Mockito.times(1)).setField(Mockito.eq("hi"));
}