2012-03-14 68 views
0

這可能是一個簡單的答案。Android Eclipse jUnit沒有看到超類

1)使用此代碼創建一個JAR文件:

package com.myCompany.base; 

public class Dex1 { 

    public String getTerm1() { 
     return "Term 1"; 
    } 
} 

這是編譯使用NetBeans到Dex1.jar。

2)在Eclipse中創建'Hello world'android應用程序。添加擴展Dex1的Dex2的代碼。複製並添加Dex1.jar到java構建路徑。

package com.myCompany; 

import com.myCompany.base.Dex1; 

public class Dex2 extends Dex1 { 

    public String getTerm2() { 
     return getTerm1() + " Term 2"; 
    } 

} 

在我的onCreate()調用:

editText.setText(dex2.getTerm2()); 

一切都很正常!我得到了android屏幕上顯示的正確字符串。是啊!

現在的問題開始:

3)使用Eclipse命令文件創建一個JUnit 3測試用例 - >新建 - >項目 - > Android的文本項目的命令,並添加代碼:

package com.myCompany.test; 

    import junit.framework.TestCase; 

    import com.myCompany.Dex2; 

    public class Dex2Test extends TestCase { 

     protected void setUp() throws Exception { 
      super.setUp(); 
      dex2 = new Dex2(); 
     } 

     protected void tearDown() throws Exception { 
      super.tearDown(); 
     } 

     Dex2 dex2; 

     public void testGetTerm2() { 
/*line 21 */ assertEquals("Term 1 Term 2", dex2.getTerm2()); 
     } 

     public void testGetTerm1() { 
/* line 25 */ assertEquals("Term 1", dex2.getTerm1()); 
     } 

    } 

在第25行編譯器爲getTerm1()提供了'方法未定義'錯誤。我不明白爲什麼這是一個錯誤?

我試圖將Dex1.jar添加到測試項目的Java Build路徑中,它編譯但我們收到了運行時錯誤'NoClassDefFoundError'。 Yuch!

更多信息16Mar2012
我設置了計劃使用的Java類,同一個JAR文件,刪除Android和它的工作。這使我得出結論,在Android/DalvikVM(又名DavrosVM)中必定存在一些異常。
更多信息16Mar2012結束

我這麼想嗎?
jar文件構建不正確(沒想到這是可能的)? 我是否正確導入jar文件?
想要導入並覆蓋jar文件中的類只是瘋了嗎?

謝謝您的閱讀,請回復。

+0

這不是我們使用Android測試項目的正常方式。一般來說,通過運行android junit測試,實際上有兩個apk文件(app.apk和test.apk)安裝在AVD(或真實設備)上運行,相互協調都由儀器測試運行器管理。 Dex2在主項目中定義,並在app.apk中定義,在儀器運行時,test.apk或instrument test runner的類加載器都不可見。 Android測試項目更側重於測試Android組件(活動,服務等),不適合測試您的主項目中定義的這些POJO。 – yorkw 2012-03-15 03:01:05

回答

1

看看Android Testing: External libraries我猜有解決您的問題。 您可能會做錯的是不導出您的庫在訂單和出口Java構建路徑

+0

我懷疑這會工作,除非你把Dex2移動到jar庫。Android項目和Android測試項目之間的依賴不在代碼級別上(即從Android項目導入一個類,然後在Test項目中從頭開始實例化該類型的對象),它會在儀器運行時解析(即您要前往的所有對象當測試運行器運行您的應用程序時,實例化測試項目中的儀器),總之,Android項目和Android測試項目之間的關係在編譯時未綁定,它在儀器運行時綁定。 – yorkw 2012-03-15 03:27:12

+0

dtMilano,你的回答是正確的。謝謝,順便說一句,我訂購了你的書。 – fishjd 2012-03-16 22:17:14