我正在测试一个使用我模拟的另一个类的类。其中一个外部类的方法修改了传递给模拟类的方法的参数,我需要检查它是否正确修改。
代码如下所示:
public class Foo
{
public boolean performTask(String name, Integer version)
{
...
}
}
public class Bar
{
private Foo foo;
public Bar(Foo foo)
{
this.foo = foo;
}
public void doSomething(String name, Integer version)
{
boolean good = foo.performTask(name, ((version.startsWith("A")) ? null : version));
...
}
}
我需要检查如果我传递一个以A
开头的name
参数,那么传递给performTask()
的第二个参数为 null。
编辑:
根据要求,这是单元测试的开始:
public class BarTest
{
@Mock
private Foo mockFoo;
@Before
public void setup() throws Exception
{
MockitoAnnotations.initMocks(this);
}
@Test
public void test() throws Exception
{
Bar bar = new Bar(mockFoo);
bar.doSomething("ABC", new Integer(1));
}
}
我看到的所有使用 verify 的示例都涉及直接调用模拟类。在这种情况下如何使用它?
正是如此。您所需要的只是访问您拥有的模拟。
Mockito.verify(mockFoo, Mockito.times(1)).performTask("ABC", null);
如果该方法应该return
什么很重要(默认情况下为 false(, 您需要使用以下方法定义行为:
Mockito.when(mockFoo.performTask("ABC", null)).thenReturn(true);
例:
@Test
public void test() throws Exception {
Mockito.when(mockFoo.performTask("ABC", null)).thenReturn(true);
Bar bar = new Bar(mockFoo);
bar.doSomething("ABC", new Integer(1));
Mockito.verify(mockFoo, Mockito.times(1)).performTask("ABC", null);
}