当前位置: 首页 > 知识库问答 >
问题:

没有在Mockito中调用嵌套的mocked方法

岳枫
2023-03-14
package kivoxdaemon.utils;

import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

public class TempTest {

   @Test
   public void test() {

      TestMock testMock = Mockito.mock(TestMock.class);

      Mockito.doCallRealMethod().when(testMock).method1();

      Mockito.doAnswer(new Answer() {
         @Override
         public Object answer(InvocationOnMock invocation) throws Throwable {
            System.out.println("Mock method3");
            return null;
         }
      }).when(testMock).method3();

      testMock.method1();
   }

}

class TestMock {

   void method1() {
      System.out.println("method1");
      method2();
   }

   private void method2() {
      System.out.println("method2");
      method3();
   }

   void method3() {
      System.out.println("method3");
   }
}

此代码在控制台中有以下输出:
Method1
Method2
Method3

而我希望它是
Method1
Method2
Mock method3

方法3被嘲弄了,那么为什么它没有被调用呢?

共有1个答案

裴成文
2023-03-14

你能建议一下如何实现这种我相信很常见的场景吗

正如@joec所写的,这并不是一个常见的场景。

原因是:您测试了Mockito的行为,但您应该测试代码的行为。

 类似资料:
  • 问题内容: 我有四个让我们说A,B,C,D的类,每个类都从另一个调用方法。 现在我已经模拟了类A,并且想模拟使用嘲笑的方法 并希望在递归方法调用上获取“ foo” 应该回来 我试过了 when(a.getB()。getC()。getD())。thenReturn(“ foo”); 但是得到了nullPointerException 然后我尝试 doReturn(“ foo”)。when(a.get

  • 我有4个类让说A,B,C,D,每一个调用的方法从另一个。 现在我已经模拟了类A,并想使用mockito模拟一个方法 但得到nullPointerException 然后我试着 doReturn(“foo”).When(A.getb().getc().getd()); 但我不能一次就做到吗?如有任何帮助,我们将不胜感激。

  • 我需要用mockito测试一个类。下面是课堂和Mockito测试。 dbBuilder。parse(file)总是返回null,因为它调用几个类,这些类反过来又调用jar文件中的几个方法。尽管我嘲笑了所有这些,但它总是返回null。我无法跟踪空值来自何处。我试图压制这些方法,但仍然没有用。 由于此方法调用返回null,因此doc值为null。因此文档调用方法并运行mockito测试失败,。这个方法

  • 假设我有3个类,ClassA包含ClassB,ClassC包含ClassB。我试图在ClassA中测试一个方法,该方法需要调用ClassB来获取ClassC的实例,并在ClassC中执行一个无效的方法(我知道这是错误的,因为ClassA不应该知道ClassC,代码气味,这不是我的代码,只是试图创建一个测试)。然而,当我尝试使用Mockito跳过该方法调用时。无论怎样,我都会遇到以下错误: 这是代码

  • 问题内容: 我正在使用Mockito用Java编写单元测试,并且我想验证某种方法是在对象 上 调用的 最后一个 方法。 我在被测试的代码中正在做这样的事情: 在我的模拟中,我不在乎编辑行中所有内容的顺序,但是非常重要的是,保存后 不要 尝试对其进行任何其他操作。有什么好方法吗? 请注意,我不是在寻找verifyNoMoreInteractions:它不会确认saveToDatabase是最后调用的

  • 问题内容: 我有一个方法,我已经分解成一些较小的嵌套函数来分解代码库: 有没有一种方法可以单独运行其中一个嵌套函数。例如: 编辑: 我正在尝试在使用pyramid_breaker构建的Web服务器上设置缓存 这是我的理解可能不准确: 现在我有这个原因是因为装饰器用来创建缓存键的名称空间是从函数和争论中产生的。因此,您不能仅将装饰器放在getThis上,因为请求变量是唯一的,并且缓存是无用的。所以我