繁体   English   中英

EasyMock Java:不兼容的类型:java.lang.ClassLoader无法转换为java.lang.Class <capture#1 of ? extends >

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM