Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Mockito的void方法的测试参数_Java_Junit_Mockito - Fatal编程技术网

Java 带Mockito的void方法的测试参数

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

是否可以使用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 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"));
}