【问题标题】:Android Eclipse jUnit does not see superclassAndroid Eclipse jUnit 看不到超类
【发布时间】:2023-03-12 10:39:01
【问题描述】:

这可能是一个简单的答案。

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 命令 File -> New -> Project -> Android Text Project 命令创建一个 jUnit 3 测试用例并添加代码:

    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 构建路径中,它可以编译,但我们收到运行时错误“NoClassDefFoundError”。太好了!

更多信息 16Mar2012
我使用 Plan Java 类和相同的 jar 文件进行了设置,以删除 Android 并且它有效。这让我得出结论,Android/DalvikVM(又名 DavrosVM)一定有一些异常。
更多信息 16Mar2012 End

我错过了什么吗?
jar 文件是否构建不正确(不认为这是可能的)? 我是否错误地导入了 jar 文件?
期望在 jar 文件中导入和覆盖一个类是不是很疯狂?

感谢您的阅读,请回复。

【问题讨论】:

  • 这不是我们对 Android 测试项目的常规做法。一般来说,通过运行android junit test,实际上在AVD(或真机)上安装并运行了两个apk文件(app.apk和test.apk),相互协调,均由instrument test runner管理。 Dex2 在主项目中定义并在 app.apk 中进行 dexed,在仪器运行时对 test.apk 或仪器测试运行程序的类加载器不可见。 Android Test Project 更侧重于测试 Android 组件(Activity、Service 等),不适合测试您主项目中定义的这些 POJO。

标签: android junit


【解决方案1】:

看看Android Testing: External libraries,我想它可以解决您的问题。 您可能做错的是没有在 Java Build Path 下的 Order and Export 中导出您的库。

【讨论】:

  • 我怀疑这会起作用,除非您将 Dex2 移到 jar 库中。 Android Project 和 Android Test Project 之间的依赖关系不在代码级别(即从 Android 项目中导入一个类,然后在 Test 项目中从头开始实例化该类型的对象),它在仪器运行时解决(即,您要去的所有对象to instrument in Test Project 是在 test runner 运行你的应用时实例化的),一句话,Android Project 和 Android Test Project 之间的关系不是在编译时绑定的,而是在 Instrument runtime 绑定的。
  • dtMilano,您的回答是正确的。谢谢,顺便说一句,我订购了你的书。
猜你喜欢
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多