Mockito:将模拟对象作为参数传递给函数(调用函数时)

时间:2015-12-02 14:38:51

标签: junit mockito

我正在使用Mockito编写一个简单的单元测试。

我有一个测试功能:

public void doSomething() {
  foo.getStudent(new School());
}

我的测试用例:

@Test
public void testDoSomething() {
   Foo mockedFoo = Mockito.mock(Foo.class);
   School mockedSchool = Mockito.mock(School.class);
   // I want to pass the mocked school as parameter when food.getStudent(school) is called
   // how to pass mocked school to method?
   when(mockedFoo.getStudent(???)) 

   // run the method under test
   myService.doSomething();
}

我希望在调用mockedSchool时将foo.getStudent(school)作为参数传递,如何在Mockito中声明此内容?

似乎Mockito只有when(...).thenReturn(),但有类似when(...).thenPassArgument(mockedObject)的内容吗?

2 个答案:

答案 0 :(得分:0)

问题在于你在doSomething方法中实例化School类的方式;当你在现场实例化时,你不能使用mockito使用mock重载该实例化。

如果您将其作为doSomething的参数传递,您应该能够执行此操作。

我相信PowerMock可以帮助你,如果你想超载内部结构。

答案 1 :(得分:0)

由于您不需要断言到School实例并只是将模拟实例作为参数传递,您可以执行以下操作:

mockedBar.getStudent(Mockito.isA(School.class));

请阅读有关isA(java.lang.Class<T> clazz) Mockito

method文档