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

Mockito Spy doReturn调用原始方法

薛宏壮
2023-03-14
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.spy;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

class MyClass {
    public int method1(){
        int x =10;
        x = method2(2);
        return x;
    }

    public int method2(int y){
        method3();
        return 20;
    }

    public int method3(){
       return 30;
    }
}

@RunWith(MockitoJUnitRunner.class)
public class Method1Test {
    private MyClass myClass = new MyClass();

    @Before
    public void setup(){}

    @Test
    public void test01(){
        MyClass spyMyClass = spy(myClass);
        doReturn(28).when(spyMyClass).method2(any());
        int a = spyMyClass.method1();
        assertTrue("We did it!!!",a==20);
    }
}
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Misplaced argument matcher detected here:

-> at com.Method1Test.test01(Method1Test.java:45)

请有人帮助我在上面,也提供我的解决上述问题。

共有1个答案

殷宇
2023-03-14

该问题是由传递给method2参数的类型不匹配引起的。这就是异常消息的这一部分告诉您的:

org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器:

通过以下测试:

@Test
public void test01(){
    MyClass spyMyClass = spy(myClass);
    doReturn(28).when(spyMyClass).method2(anyInt());
    int a = spyMyClass.method1();
    assertTrue("We did it!!!",a==28);
}
    null
 类似资料:
  • 我使用的是Mockito1.9.0。我想在JUnit测试中模拟类的单个方法的行为,因此 问题是,在第二行中,实际上是被调用的,导致了一个异常。我使用模拟的唯一原因是,以后每当调用时,将不会调用真正的方法,而返回对象。 是接口,是接口的实现(如果这很重要的话)。 我需要做些什么来纠正这种间谍行为?

  • 好的,我有一个网页,为用户提供了一些步骤,还有一个mixin,它处理这些步骤的属性和逻辑,比如当前/下一步的值,检查用户从每个步骤前进到下一个步骤,等等。 现在我必须添加一个新的功能,只有在某个步骤之后才能执行,所以我想能够做的是调用原始的mixin方法,用户每次进入下一步添加此功能时都会调用该方法。 更清楚地说,在webapp的许多页面中使用了混合方法,所以我想覆盖扩展它的组件中的罪魁祸首混合方

  • JavaScript 允许我们像使用对象一样使用原始类型(字符串,数字等)。JavaScript 还提供了这样的调用方法。我们很快就会学习它们,但是首先我们将了解它的工作原理,毕竟原始类型不是对象(在这里我们会分析地更加清楚)。 我们来看看原始类型和对象之间的关键区别。 一个原始值: 是原始类型中的一种值。 在 JavaScript 中有 7 种原始类型:string,number,bigint,

  • 问题内容: 如果重写了JavaScript中的原型方法,则可以调用该基础方法吗? 问题答案: 我不明白您到底想做什么,但是通常按照以下方式完成特定于对象的行为:

  • 我尝试删除方法改造与原始json对象使用删除我的列表项。我曾经使用POST方法与原始方法它成功了,但我需要相同的@DELETE方法。 我需要这种类型的DELETE方法,使用这种url类型的原始对象 API/跟踪/删除/{user_id} 我试着用 我把我的json