我有一个不太好的旧代码。 我想为此编写一个测试,而不更改代码中的任何内容。 因此,我尝试使用Powermock,但是扩展类的模拟继续进入真实的类。
我该如何测试?甚至无需更改代码就可以吗?
public class A extends B {
public static MyObject process(final List<String> myList) {
List<Integer> myIntList = getSomething(123);
MyObject obj = new MyObject();
return obj.get(myIntList);
}
}
public class B {
protected static MySource MY_SOURCE = new MySource();
protected static List<Integer> getSomething(String id) {
List<Integer> intList = new ArrayList<>();
intList.add(123);
return intList
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
public class ATest {
@InjectMocks
private A aClass;
@Before
public void setUp() {
initMocks(this);
PowerMockito.when(B.class, "getSomething", "123").thenReturn(Collections.EMPTY_LIST());
}
@Test
public void testProcess() {
List<String> inputList = new ArrayList<>();
inputList.add("mylist1");
MyObject result = aClass.process(inputList);
assertNotNull(result);
}
}