关于java:我们如何使用mockito摆脱对象

How we can get ride of the object using mockito

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

1
2
3
4
5
6
public a(int a, int b){
    a.setA(12);
    Injec inj = new Injec();
    inj.check();
    return (a*b);
}

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

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

我正在使用

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

但它给了我例外


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

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

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

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

如果您使用jmockit,正如@rog_rio所指出的那样,这是可能的,您只需要将@Mocked Injec添加到您的测试类中,并且Injec实例在创建时将被模拟。


使用jmockit可以模拟您的Injec类,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
@RunWith(JMockit.class)
public class MyTest
{
    private ClassToTest underTest;

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

        // your assertions
    }
}