我正在尝试模拟一个内部调用私有方法的方法。此私有方法使用方法读取文件classloader.getclass
并填充作为类的静态变量的列表。我尝试了所有可能的方法来模拟这个私有方法,但它似乎不起作用。
class TestLoad {
private static List <String> myList = new ArrayList <String> ();
private static final String filename = "/myfile.txt";
public XYZ generateList(Abc abc) throws Exception {
populateList();
}
private populateList() {
ClassLoader classLoader = TestLoad.class.getClassLoader();
File listfile = new File(classLoader.getResource(
filename).getFile());
List <String> localList = new ArrayList <String> ();
try (Scanner scanner = new Scanner(listfile)) {
while (scanner.hasNextLine()) {
String text = scanner.nextLine();
localList.add(text.trim());
}
scanner.close();
} catch (IOException e) {}
return localList;
}
}
我正在尝试模拟populateList()
,但控件始终进入方法。我通过 mockito 和 powermock 尝试了网上几乎所有的选项,但它似乎不起作用。我的 Junit 如下
类开始有 @RunWith(PowerMockRunner.class) @PrepareForTest(TestLoad.class) ArrayList testList = new ArrayList(); testList.add("00"); TestLoad 实例 = PowerMock.createPartialMock(TestLoad.class,"populateList"); PowerMock.expectPrivate(instance, "populateList").andReturn(testList); PowerMock.replay(实例);
以下是日志供参考:
java.lang.IllegalStateException:无法转换名称为 com.xyz.TestLoad 的类。原因:java.io.IOException:无效常量类型:org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266) at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java) 17 :180) at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) 在 org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145) 在 org.powermock.modules.junit4.common。 internal.impl.JUnit4TestSuiteChunkerImpl。