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