为什么在mockito对象上使用的方法不显示println?

时间:2015-08-17 07:39:48

标签: java mockito

所以我想打印一些字符串。当我这样做时:

MyClass myClass = new MyClass();
myClass.myFunction(myList, path);

它告诉我:

somepath/ABC
somepath/DEF
somepath/PQR

但是当我这样做时:

MyClass myClass = mock(MyClass.class);
myClass.myFunction(myList, path);

它没有向我展示任何东西。是否可以在模拟对象上返回这些字符串?

2 个答案:

答案 0 :(得分:2)

由于您使用模拟对象,您可以模拟其myFunction方法的行为,如下所示:

when(myClass.myFunction()).thenReturn("somepath/ABC");

请注意,只有当方法的返回类型为String时才会编译。

如果方法return-type是void,那么你不应该模拟返回值,而应该调用 real 方法:

Mockito.doCallRealMethod().when(myClass).myFunction();

将执行原始方法实现中的println语句。但是这种方法存在一些缺陷 - 如果方法使用某些类成员,则有可能获得NullPointerException(或其他例外),对于模拟的类成员null对象,除非您将它们设置为引用其他模拟对象。

答案 1 :(得分:1)

在mock对象上调用特定方法时,可以使用下面的代码返回一些内容:

when(myClass.myFunction()).thenReturn("somepath/ABC");