例外:mockito想要但未被调用,实际上与这个mock的交互为零

2022-08-31 17:03:58

我有接口

Interface MyInterface {
  myMethodToBeVerified (String, String);
}

接口的实现是

class MyClassToBeTested implements MyInterface {
   myMethodToBeVerified(String, String) {
    …….
   }
}

我有另一个班级

class MyClass {
    MyInterface myObj = new MyClassToBeTested();
    public void abc(){
         myObj.myMethodToBeVerified (new String(“a”), new String(“b”));
    }
}

我正在尝试为MyClass编写JUnit。我已经完成了

class MyClassTest {
    MyClass myClass = new MyClass();
  
    @Mock
    MyInterface myInterface;

    testAbc(){
         myClass.abc();
         verify(myInterface).myMethodToBeVerified(new String(“a”), new String(“b”));
    }
}

但是我得到了想要的嘲笑,但没有被调用,实际上在验证呼叫中与这个模拟的交互为零

任何人都可以提出一些解决方案。


答案 1

您需要在要测试的类中注入模拟。此刻,你正在与真实物体互动,而不是与模拟物体互动。您可以通过以下方式修复代码:

void testAbc(){
     myClass.myObj = myInteface;
     myClass.abc();
     verify(myInterface).myMethodToBeVerified(new String("a"), new String("b"));
}

尽管将所有初始化代码提取到@Before

@Before
void setUp(){
     myClass = new myClass();
     myClass.myObj = myInteface;
}

@Test
void testAbc(){
     myClass.abc();
     verify(myInterface).myMethodToBeVerified(new String("a"), new String("b"));
}

答案 2

您的类将创建一个新的 ,而不是使用您的模拟。我在Mockito wiki上的文章描述了两种处理这个问题的方法。MyClassMyClassToBeTested


推荐