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



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

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");

最新更新