![](/img/trans.png)
[英]Incompatible types: java.lang.Class<capture#1 of ?> cannot be converted to
[英]EasyMock java: incompatible types: java.lang.ClassLoader cannot be converted to java.lang.Class<capture#1 of ? extends >
我正在使用Easymock为以下代码编写测试用例:
public class MyClass{
public String getToken(String scope){
String requestToken = "";
try {
URL keyStoreFile = getClass().getClassLoader().getResource(keyStoreFileName);
/*rest of the code*/
}
}
我需要在行上面嘲笑。 它是指属性文件。 我嘲笑为:
@RunWith(PowerMockRunner.class)
public class MyClassTestCase {
@Test
public void testToken(){
MyClass myclass= new Myclass();
PowerMock.createPartialMock(MyClass.class, "getClass");
expect(myclass.getClass()).andReturn(classLoader);
expect(classLoader.getResource(null)).andReturn(null);
replay(classLoader,myclass);
}
}
尝试了许多方法,但无法解决这个问题。 请帮忙。
先感谢您。
可悲的是,您的代码根本无法编译,并且缺少很多内容。 此外,您也没有给出发生编译错误的行。
最后,嘲笑那个低点是没有用的。 我只是用专用于测试的keystoreFileName
进行测试。 就是这样。
无论如何,我会猜到。 这行expect(myclass.getClass()).andReturn(classLoader);
会给出与您的错误类似的错误。 因为getClass()
返回Class<?>
(以编译器的方式讲,它是java.lang.Class<capture#1 of ? extends>
)。 但是您andReturn
classloader
传递给andReturn
。 哪个不是,永远也不会是Class<?>
。
但我认为您想执行以下操作:
@Test
@SuppressWarnings("unchecked")
public void testToken(){
Class<MyClass> clazz = PowerMock.createMock(Class.class);
ClassLoader classLoader = PowerMock.createMock(ClassLoader.class);
MyClass myclass = PowerMock.createPartialMock(MyClass.class, "getClass");
EasyMock.expect((Class<MyClass>) myclass.getClass()).andReturn(clazz);
expect(classLoader.getResource(null)).andReturn(null);
replay(clazz, classLoader, myclass);
myclass.getToken("scope");
}
因此,您基本上只需要进行投射。 并添加一个@SuppressWarnings("unchecked")
。 没有更清洁的方法。
然后,它无论如何都无法工作,因为JVM不允许您模拟Class
。 这将带您回到我的建议:不要嘲笑这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.