我们如何使用mockito来驾驭对象



我正在尝试为我的方法创建一个JUnit测试。我有一个方法

public a(int a, int b){
    a.setA(12);
    Injec inj = new Injec();
    inj.check();
    return (a*b);
}

我想跳过这一节,因为它使用HTTP请求

Injec inj = new Injec();
inj.check();

我正在使用

when(Matchers.<Injec> anyObject().check()).thenReturn(null);

但它给了我异常

使用Mockito,您将无法用当前代码做到这一点。

问题是方法a直接通过调用默认构造函数来创建一个新的Injec对象。Mockito没有办法嘲笑这个新实例,因为它无法控制它

因此,您需要重构代码。有几种可能的解决方案:

  • Injec实例作为参数传递给a方法。通过这种方式,您可以对实例进行模拟,并对方法进行模拟
  • Injec实例注入到类中(例如使用构造函数注入)

如果您正在使用JMockit,正如@Rogério所指出的,这是可能的,您只需要将@Mocked Injec添加到测试类中,Injec实例在创建时就会被嘲笑。

使用JMockit,您可以如下模拟Injec类:

@RunWith(JMockit.class)
public class MyTest
{
    private ClassToTest underTest;
    @Test
    public void testA(@Mocked Injec injec) {
        underTest.a(10, 20);
        // your assertions
    }
}

相关内容

  • 没有找到相关文章

最新更新