Android Eclipse jUnit没有看到超类

问题描述:

这可能是一个简单的答案。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

看看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