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();
}

我想在调用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文档。

相关内容

  • 没有找到相关文章

最新更新