簡體   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