プライベート メソッドを内部的に呼び出すメソッドをモックしようとしています。このプライベート メソッドは、メソッドを使用してファイルを読み取り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(インスタンス、「populateList」).andReturn(testList); PowerMock.replay(インスタンス);
以下、参考までにログです。
java.lang.IllegalStateException: com.xyz.TestLoad という名前のクラスを変換できませんでした。理由: java.io.IOException: 無効な定数型: org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266) で 17 で 18 org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java :180) org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68) で java.lang.ClassLoader.loadClass(ClassLoader.java:357) で java.lang.Class.forName0(Native Method) でorg.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145) の java.lang.Class.forName(Class.java:348) org.powermock.modules.junit4.common. internal.impl.JUnit4TestSuiteChunkerImpl.