是否可以使用Mockito测试作为参数传递给无效方法的示例的值?
public String foo() { Object o = new ObjectX(); o.setField("hi"); someDao.boo(o); return "response"; }
boo是无效的,我想测试foo是否将字段设置为“hi”
dkqlctbz1#
也许你想使用doNothing方法。
@Mock SomeDao someDao; @Captor ArgumentCaptor<ObjectX> captor; @Test void test() { doNothing().when(someDao).boo(captor.capture()); foo(); assertEquals("hi", captor.getValue().getField()); }
2ledvvac2#
更新这是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()); } }
**下面是我的第一个答案,它以自己的方式正确。**不,这是不可能的Mockito,因为ObjectX是void方法中的一个新Object,要用Mockito完成这一点,你必须将ObjectX作为参数传递给方法foo()。如果您的代码无法更改,您可能需要查看Powermock。
foo()
public String foo(ObjectX objectX) { Object o = objectX; o.setField("hi"); someDao.boo(o); return "response"; }
测试用例
@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")); }
2条答案
按热度按时间dkqlctbz1#
也许你想使用doNothing方法。
2ledvvac2#
更新这是JB在我的评论中建议的。
**下面是我的第一个答案,它以自己的方式正确。**不,这是不可能的Mockito,因为ObjectX是void方法中的一个新Object,要用Mockito完成这一点,你必须将ObjectX作为参数传递给方法
foo()
。如果您的代码无法更改,您可能需要查看Powermock。测试用例