我想打印一些字符串。当我这样做的时候:
MyClass myClass = new MyClass();
myClass.myFunction(myList, path);
它告诉我:
somepath/ABC
somepath/DEF
somepath/PQR
但是当我这样做的时候:
MyClass myClass = mock(MyClass.class);
myClass.myFunction(myList, path);
它没有显示任何东西。是否有可能在模拟对象上返回这些字符串?
由于使用的是模拟对象,因此可以模拟其myFunction
方法的行为,如下所示:
when(myClass.myFunction()).thenReturn("somepath/ABC");
注意,只有当你的方法的返回类型是String
时,这才会编译。
如果你的方法返回类型是void
,那么你不应该模拟返回值,而应该调用真实的方法:
Mockito.doCallRealMethod().when(myClass).myFunction();
,它将在原始方法实现中执行println
语句。但是,这种方法有一些缺陷—如果方法使用某些类成员,则有可能获得NullPointerException
(或其他异常),这些成员对于模拟对象将是null
,除非您将它们设置为引用其他模拟对象。
您可以使用下面的代码在模拟对象上调用特定方法时返回一些东西:
when(myClass.myFunction()).thenReturn("somepath/ABC");