例如,我有这个类:
public class A {
private List<String> list;
public A(B b){
list = b.getList();
}
public List<String> someMethod(){
return list;
}
}
我想在不调用构造函数的情况下对 someMethod
进行单元测试。我使用反射 来设置list
。
问题是我不想创建 B
类对象,我不能模拟它,因为它会导致 NPE。
所以我的问题是:
如何在不调用 A
的构造函数的情况下测试 someMethod
?有什么方法可以模拟 A 类并且不会失去调用方法的可能性吗?
创建参数为零的构造函数不是解决方案。
注意:我不想更改 A 类的任何部分。我问是否可以在不添加或更改 A 类中的任何内容的情况下执行此测试。
最佳答案
您可以测试类 A 而无需通过 Mockito 调用它的构造函数。不确定我是否真的理解您的要求,但以下代码对我有用。
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ATest {
@Test
public void test() {
A a = mock(A.class);
when(a.someMethod()).thenCallRealMethod();
List<String> listInA = new ArrayList<String>();
ReflectionTestUtils.setField(a, "list", listInA);
assertThat(a.someMethod(), is(listInA));
}
}
关于java - 是否可以调用模拟对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618956/