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

无法转到模拟类的方法

凌华奥
2023-03-14

我对JUnit测试用例有问题。由于某些原因,我无法进入模拟类的一个方法,而且我不确定为什么会发生这种情况。

import java.util.ArrayList;

import static java.util.UUID.randomUUID;

public class Sample {
    protected SomeClass someClass;

    public void setVariables(SomeClass someClass) {
        this.someClass = someClass;
    }

    protected UserInfo func(String id){
        UserInfo userInfo = someClass.getInfo(id);
        // I checked that the someClass is mocked instance
        // id is not null
    }
}

我甚至不打算用下面的方法。我不确定为什么会发生这种情况,这就给了我上面的结论。

public class SomeClass{
    public UserInfo getInfo(String id) {
        // not even going in this function at all
        if (id == null || id.isEmpty()) return null;

        UserInfo userInfo = null;
        try {
            // do Something
        } catch () {
        }
        return userInfo;
    }
}

class SampleTest{

    Sample sample;
    SomeClass someclass = mock(SomeClass.class);
    UserInfo userinfo = mock(UserInfo.class);
    @BeforeEach
    void setUp(){
        // other initialization
        sample = new Sample();
        sample.setVariables(someclass);
    }
    @Test
    void func(){
        when(someclass.getInfo(randomUUID().toString())).thenReturn(userinfo);
        UserInfo userInfo = sample.func(randomUUID().toString());
        // comparison using assert
    }
}

共有1个答案

柳和怡
2023-03-14

when语句错误。

when(SomeClass.GetInfo(randomUUID().ToString())).ThenReturn(userinfo)

一些可能的解决方案:

var randomUuid = randomUUID().toString();

when(someclass.getInfo(anyString())).thenReturn(userinfo)
when(someclass.getInfo(any())).thenReturn(userinfo)
when(someclass.getInfo(eq(randomUuid))).thenReturn(userinfo)

如果模拟SomeClass的实例,您的getInfo代码将不会被执行,请尝试使用spy。

SomeClass someclass = spy(SomeClass.class);
 类似资料:
  • 我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。

  • 我正在编写单元测试的方法,以找到银行附近我的位置。我嘲弄了这个类并尝试调用这些方法。但是,控件不会转到方法来执行它。下面是单元测试用例。 我所尝试的也是调用它的真实方法, 这调用真实的方法,但我上面嘲笑的方法执行起来就像真实的方法一样。意思是“被嘲弄的方法”没有返回我要求它们返回的内容。 那么,我在这里做错了什么?方法为什么不执行?

  • 下面是我在测试中尝试做的事情。 TestConfig: 测试:: mockito:通过反射调用参数的mock方法 mockito:是否可以将mock与方法名结合在一起,在when()调用中创建methodCall? 利用Mockito通过反射模拟方法

  • 例如,我有处理程序: 但是当我试图模拟它时,它实际上调用。如何使用来模拟它的方法?

  • 我试图为一个类编写一个单元测试,这个类使用带有库中的的Google vision API。问题是,由于某种原因,我的模拟仍然调用真正的方法,然后抛出一个NPE,这破坏了我的测试。我以前从未在模拟上见过这种行为,我想知道我是不是做错了什么,是不是Spock/Groovy中有bug,还是与Google lib有关?