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

当一个方法调用无效的方法调用内部时,什么都不工作

谷梁裕
2023-03-14

主课

public class BootSample {

    public int call(int m) {
        System.out.println("Entering into Call Method");
        int n = m*10;
        TestUtil testUtil = new TestUtil();
        testUtil.add(m, n);
        System.out.println("End of Call Method Value n : " + n);
        return n;
    }

}

工具类

public class TestUtil {

    public void add(int a, int b) {
        System.out.println(" Entering into TestUtil Method ");
        int c = a +b;
        System.out.println(" End of TestUtil Method Value : " + c);
    }

}

考试班

@RunWith(MockitoJUnitRunner.class)
public class BootSampleTest {

    @Mock
    TestUtil testUtil; 

    @Before
    public void setup() {

    }

    @Test
    public void utilSuccess() throws Exception {
        BootSample bootSample = new BootSample();
        doNothing().when(testUtil).add(any(Integer.class),any(Integer.class));
        int result = bootSample.call(10); 
        assertEquals(result,100);
    }

}

输出:

Entering into Call Method
 Entering into TestUtil Method 
 End of TestUtil Method Value : 110
End of Call Method Value n : 100

我试图嘲笑util无效的方法调用与do没什么,但不工作。有人能帮我解决吗?我在我们的应用程序中遇到了类似的功能。

共有3个答案

令狐凌
2023-03-14

可以用Mockito.anyInt()代替Integer.class,代码示例:

Mockito.doNothing().when(testUtil).add(Mockito.anyInt(),Mockito.anyInt());
纪实
2023-03-14

如果您看到了TestUtil类中的System.out.printlns,那么它不会被嘲笑。看起来你错过了BootSample上的@InjectMocks,告诉Mockito将你模仿的TestUtil注入其中。

请参见此处文档中的示例:http://static.javadoc.io/org.mockito/mockito-core/2.13.0/org/mockito/InjectMocks.html

颜鸿云
2023-03-14

问题是您的call方法负责创建一个TestUtil对象,并且该对象不能被模拟。尝试添加TestUtil作为构造函数参数,如下所示:

public class BootSample {

    private TestUtil testUtil;

    public BootSample(TestUtil testUtil) {
        this.testUtil = testUtil;
    }

    public int call(int m) {
        System.out.println("Entering into Call Method");
        int n = m*10;
        testUtil.add(m, n);
        System.out.println("End of Call Method Value n : " + n);
        return n;
    }
}

然后,您需要模拟TestUtil类,并将模拟传递给BootSample类:

BootSample bootSample = new BootSample(testUtil);
 类似资料:
  • 问题内容: 是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样: 编辑- 细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种例如称为的代理,然后在我调用它时,将获得

  • 我的车型带有bean验证 汽车服务 } 当我从控制器Valid调用addCar时工作正常,但是当我从同一个服务类中的方法调用它时,它不验证汽车模型。 我从控制器调用addCars 这个怎么解决?我应该做些什么来使它工作呢?我必须对代码进行哪些更改?

  • 问题内容: 我的应用程序中编码了几个方面。除以下内容外,其他所有功能均有效。 Service Interface Service Implementation Aspect 当我尝试执行该send方法时,调试点在方面没有受到影响perform。 更新 我做了一些调查,发现当从下面的方法中调用该方法时,这是行不通的 但是,如果我调用该方法,它将可以正常工作。但是,当Reply方法在内部调用send方

  • 我在vue方法中启动Sweatrep时遇到问题。如果我直接在脚本中调用Sweatrep,但当我想在单击按钮时启动Sweatrep时不会发生任何事情(控制台中没有错误)。代码看起来 Vue(Vuetify) 这项工作 不行 我是新的Vue,所以也许错误很容易看到,但我不知道为什么没有工作。 所以问题是:为什么当我点击一个按钮时不能启动sweetalert模式?

  • 问题内容: 我在一个教程中找到了这个示例。 当我运行此程序时,我的hs.size()值为2 ..,并且equals方法仅被调用一次。有人解释了我何时在HashSet中调用equal()方法 当上述程序中的equal方法调用时 问题答案: 您的代码将调用的唯一一次。另一次调用方法将是对的类。 此答案说明何时由和何时调用方法。摘录: HashSet利用哈希码来加快处理速度。假定彼此相等的两个对象将具有

  • 问题内容: 当我创建自己的Android自定义类时,它就是本机类。然后,当我要重写基方法,我总是叫方法,就像我一直做的,等 我认为就是这样,因为从一开始,Android团队就建议我们始终调用每个方法重写。 但是,在 许多书籍中, 我可以看到比我自己更有经验的开发人员经常忽略调用,而且我真的怀疑他们是因为缺乏知识而这样做。例如,看看这个基本的SAX,其中解析器类中被省略,并且: 如果尝试通过Ecli