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

时间:2017-11-30 06:46:22

标签: java easymock

我正在使用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);
}
}

尝试了很多方法,但无法解决这个问题。请帮忙。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

可悲的是,你的代码根本没有编译,很多东西都丢失了。此外,您没有给出发生编译错误的行。

最后,嘲笑那个低无用。我只想测试keystoreFileName专用于测试。就是这样。

无论如何,我猜。此行expect(myclass.getClass()).andReturn(classLoader);会出现与您的错误类似的错误。因为getClass()返回Class<?>(在编译器方式中是java.lang.Class<capture#1 of ? extends>)。但是您将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。这将带你回到我的建议:不要嘲笑这个。