ner*_*sol 1 java reflection unit-testing mockito
例如,我有这个课程:
public class A {
private List<String> list;
public A(B b){
list = b.getList();
}
public List<String> someMethod(){
return list;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在someMethod不调用构造函数的情况下进行单元测试.我用反射来设定list.
问题是我不想创建B类对象,我不能模拟它,因为它会导致NPE.
所以我的问题是:
如何测试someMethod而不调用构造函数A?有没有办法模拟A类并且不会失去调用方法的可能性?
创建零参数的构造函数不是解决方案.
注:我不希望改变一个类的任何部分.我问是否有可能在没有添加或更改A类中的任何内容的情况下执行此测试.
您可以在不调用Mockito构造函数的情况下测试A类.不确定我是否真的了解您的要求,但以下代码对我有用.
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));
}
}
Run Code Online (Sandbox Code Playgroud)