【发布时间】: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。