模拟 - 零交互

时间:2014-07-10 08:42:55

标签: java mocking

我编写了一个测试来验证我的类中的公共方法是否被调用。我的测试失败如下。谁能告诉我为什么会这样呢?

  

想要但未被调用:`mockMyClass.runThis();

     

实际上,这个模拟没有互动。

class MyClass{
  public void myMethod(){    
    runThis("hello");
  }
}

public void runThis(String str){
  return;
}

测试课

@Mock
MyClass mockMyClass;

MyClass myClass = new MyClass();

@Test
public void test(){
  myClass.myMethod();
  verify(mockMyClass).runThis(anyString());
}

1 个答案:

答案 0 :(得分:2)

你没有调用 mock ,而是真正的类。您需要生成一个模拟,然后在该模拟上调用。尝试类似:

MyClass mock = mock(MyClass.class);  // I'm using the methods rather than annotation here
mock.myMethod();

并断言。我不太确定上面runThis()的位置。如果它在一个包含的类上,那么那是需要模拟的东西。如果它在同一个类上,那么你本身就不能使用 mock ,因为mock会替换所有功能,也许Mockito spy()机制在这里会有用。 S ection 13 of the doc就此提出了更多建议。