![](/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.