我想模拟一个内部调用私有方法的方法。这个私有方法使用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它似乎并没有work.My的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(instance);
下面是日志以供参考:
java.lang.IllegalStateException:无法用名com.xyz.TestLoad改造类。原因:java.io.IOException:无效的常量类型:17 at 17 at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266) at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader .java:180) at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0 (本机方法) 在java.lang.Class.forName(Class.java:348) 在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145) 的组织。 powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegat orFromClassloader(JUnit4TestSuiteChunkerImpl.java:40) 在org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244) 在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl。(JUnit4TestSuiteChunkerImpl的.java:61) 在org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner(AbstractCommonPowerMockRunner.java:32) 在org.powermock.modules.junit4.PowerMockRunner(PowerMockRunner.java:34) 。在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
后的测试代码你都试过了。你在这里发布的代码有很多编译错误。 – kswaughs
下面是代码TestLoad实例= PowerMock \t \t \t \t .createPartialMock(TestLoad.class, \t \t \t \t \t \t “populateList”); \t \t PowerMock.expectPrivate(例如, “populateList”)andReturn( \t \t \t \t testList)。 \t \t PowerMock.replay(instance); –