我正在使用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();
}
我想在调用foo.getStudent(school)
时将mockedSchool
作为参数传递,如何在Mockito中声明这一点?
看起来Mockito只有when(...).thenReturn()
,但有类似when(...).thenPassArgument(mockedObject)
的东西吗?
问题在于您在doSomething方法中实例化School类的方式;当您在现场实例化它时,您不能使用mockito用mock重载该实例化。
如果您将其作为doSomething的参数传递,您应该能够执行此操作。
我相信,如果你想让内部结构过载,PowerMock可以帮助你。
由于您不需要断言到School
实例中,只需传递一个模拟实例作为参数,因此可以执行以下操作:
mockedBar.getStudent(Mockito.isA(School.class));
请阅读有关isA(java.lang.Class<T> clazz)
方法的Mockito文档。