Junit 模拟私有方法
我试图模拟一个在内部调用私有方法的方法。这个私有方法使用Junit 模拟私有方法,junit,mockito,powermock,easymock,powermockito,Junit,Mockito,Powermock,Easymock,Powermockito,我试图模拟一个在内部调用私有方法的方法。这个私有方法使用classloader.getclass方法读取一个文件,并填充一个作为类的静态变量的列表。我尝试了所有可能的方法来模拟这个私有方法,但它似乎不起作用 类TestLoad{ 私有静态列表myList=newarraylist(); 私有静态最终字符串filename=“/myfile.txt”; 公共XYZ生成列表(Abc)引发异常{ 大众主义者(); } 私人平民主义者(){ ClassLoader ClassLoader=TestLoa
classloader.getclass
方法读取一个文件,并填充一个作为类的静态变量的列表。我尝试了所有可能的方法来模拟这个私有方法,但它似乎不起作用
类TestLoad{
私有静态列表myList=newarraylist();
私有静态最终字符串filename=“/myfile.txt”;
公共XYZ生成列表(Abc)引发异常{
大众主义者();
}
私人平民主义者(){
ClassLoader ClassLoader=TestLoad.class.getClassLoader();
File listfile=新文件(classLoader.getResource(
getFile());
List localList=newarraylist();
尝试(扫描仪=新扫描仪(列表文件)){
while(scanner.hasNextLine()){
字符串文本=scanner.nextLine();
add(text.trim());
}
scanner.close();
}捕获(IOE){}
返回localList;
}
}
我试图模拟populateList()
,但控件始终进入该方法。我尝试了mockito和powermock在网上的几乎所有选项,但似乎都不起作用
类开始时有@RunWith(PowerMockRunner.Class)
@PrepareForTest(TestLoad.class)
ArrayList testList=新的ArrayList();
测试列表。添加(“00”);TestLoad实例=PowerMock.createPartialMock(TestLoad.class,“populateList”);
expectPrivate(实例,“populateList”).andReturn(testList);
回放(实例)强>
以下是日志供参考:
java.lang.IllegalStateException:未能转换名为com.xyz.TestLoad的类。原因:java.io.IOException:无效的常量类型:17处的18
位于org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266)
位于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(本机方法)
位于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.createDelegatorFromClassloader(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(本机方法)
您的测试代码看起来像是在使用PowerMock EasyMock。 但是你的帖子也被标记为mockito&powermockito 我使用powermockito给出以下解决方案 主Java类:
public class TestLoad {
private static List<String> myList = new ArrayList<String>();
private static final String filename = "/myfile.txt";
public List<String> generateList(Abc abc) throws Exception {
System.out.println("generateList method is called");
return populateList();
}
private List<String> populateList() {
System.out.println("populateList method is called");
ClassLoader classLoader = TestLoad.class.getClassLoader();
File listfile = new File(classLoader.getResource(filename).getFile());
// Read listfile and build localList logic here
List<String> localList = new ArrayList<String>();
return localList;
}
}
generateList method is called
test output:[00]
经过大量研究,我找到了解决办法。我们需要在pom.xml中添加以下作为依赖项以防止此错误**
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
org.javassist
javassist
3.18.2-GA
**将您尝试过的测试代码发布出来。您在这里发布的代码有很多编译错误;expectPrivate(实例,“populateList”).andReturn(testList);回放(实例);我已经尝试过这种方法,它给了我与上面帖子中提到的相同的错误。。这里的问题有所不同。经过大量研究,我找到了解决办法。我们需要在pom.xml…org.javassist javassist 3.18.2-GA中添加以下内容作为依赖项
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>