我正在使用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);
}
}
尝试了很多方法,但无法解决这个问题。请帮忙。
提前谢谢。
答案 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
。这将带你回到我的建议:不要嘲笑这个。