了解如何使用Mockito doReturn /何时对返回类型为void

时间:2017-07-04 09:54:50

标签: unit-testing junit mockito

假设我有一个测试类,有两个方法如下:

public class TestClass {        
   @Mock
   TestClass testObject;

   @Test
   public void method1() {
      doReturn("str").when(testObject).method2();

      String s1 = testObject.method2(); // This line gives compilation 
      //error. Type mismatch cannot convert from void to string
   }

   @Test
   public void method2() {
   }    

我基本上是在尝试模拟 method1 ,这是 method1 中的依赖项。

但是正如您所看到的, method2 返回类型为void。所以,我正在使用 doReturn 来模拟它。

就我的理解而言,虽然方法2的返回类型为void,但在我模拟它之后,方法2的模拟版本应该返回 String 类型。

但是,正如我在方法1中所评论的那样,它给出了类型不匹配。

2 个答案:

答案 0 :(得分:3)

你只是让嘲笑错了。

模拟意味着:不是创建特定类的“真实”对象,而是创建一个看起来的存根/虚拟/模拟,就像该类的对象一样。但实际上 - 事实并非如此。

除此之外:嘲笑不能更改方法的签名。所以你的想法,你可以以某种方式使用mocking有一个void方法返回的东西错误

你只是走错了兔子洞 - 你打算做什么可能。

答案 1 :(得分:0)

我认为你使用的是错误的方法。 doReturn允许您“注入”执行结果。如果您想“伪造”整个方法执行,您应该考虑使用doAnswer

doAnswer(new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
      // whatever you want to execute here...
      // Simply return null
      return null;
    }
}).when(testObject).method2();