我们如何使用mockito来获取物体

时间:2015-11-27 12:47:44

标签: java mockito jmockit

我正在尝试为我的方法创建一个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);

但它给了我异常

2 个答案:

答案 0 :(得分:3)

使用Mockito,您将无法使用当前代码执行此操作。

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

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

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

如果您使用JMockit,正如@Rogério所述,这是可能的,您只需将@Mocked Injec添加到测试类中,Injec实例将被模拟已创建。

答案 1 :(得分:0)

使用JMockit,您可以按如下方式模拟Injec课程:

@RunWith(JMockit.class)
public class MyTest
{
    private ClassToTest underTest;

    @Test
    public void testA(@Mocked Injec injec) {
        underTest.a(10, 20);

        // your assertions
    }
}