在mockito stubbing中传递实际参数

时间:2016-03-14 06:28:15

标签: mockito junit4 stubbing

对于在实际生产代码中生成的存根变量的情况, 我们如何在JUnits中使用Mockito.when传递实际参数?

例如,生产代码中的方法如下:

1)servicaClass.doSomething(Calendar.getInstance)

2)servicaClass.doSomething(someMethodToCreateActualVariable())

在测试实际参数如何传递时? 喜欢

- > when(mockedServiceClass.doSomething(Calendar.geInstance)).thenReturn("")

但是,测试生产代码时会在执行时采用自己的日历值。

可以有一种方法可以为使用过的变量填充公共setter getter方法。但这似乎不是最佳解决方案。

这方面的任何指示都会有所帮助吗?

1 个答案:

答案 0 :(得分:1)

如果您在事实之前知道匹配值,则可以使用存根。像eq(与equals比较)和same(与==比较)等Mockito匹配器会对此有所帮助,或者您可以通过指定eq行为来获得// Without matchers when(yourMock.method(objectToBeComparedWithEquals)) .thenReturn(returnValue); // With matchers when(yourMock.method(eq(objectToBeComparedWithEquals))) .thenReturn(returnValue); when(yourMock.method(same(objectToBeComparedReferentially))) .thenReturn(returnValue); 行为价值直接。请注意,如果您使用任何值,则必须使用Matchers;你不能只使用Matchers进行双参数方法调用的一个参数。

SomeValue someValue = yourSystemUnderTest.action();
verify(yourMock).initializeValue(someValue);

如果您在运行方法之后不知道匹配值,则可能需要验证。相同的规则适用于Matchers。

ArgumentCaptor myCaptor = ArgumentCaptor.forClass(SomeValue.class);
yourSystemUnderTest.action();
verify(yourMock).initializeValue(myCaptor.capture());
SomeValue valueMockWasCalledWith = myCaptor.getValue();

// Now you've retrieved the reference out of the mock, so you can assert as usual.
assertEquals(42, valueMockWasCalledWith.getInteger());

如果您需要在事后检查该值,您可以使用Captor:

finally: