gpt4 book ai didi

android - 使用 Maven 进行 Android 集成测试中的 NoSuchFieldError

转载 作者:行者123 更新时间:2023-11-30 03:16:26 27 4
gpt4 key购买 nike

我有一个Android Maven项目,我想实现一个仪器测试,当然应该由maven运行。

但是我得到了 NoSuchMethodError 和 NoSuchFieldError。

我的 maven 项目中有三个模块。

  1. 核心库,我在其中定义了 DBHelper 类
  2. android 应用程序项目。
  3. android 仪器测试项目。

当我执行 mvn clean install 时,maven 会成功执行所有操作,直到在真实的 android 设备上执行 android instrumentation-test。

当我自己启动应用程序并单击仪器测试失败的按钮时,我没有收到任何错误。所以我认为我的android仪器测试的pom.xml一定有问题。

下面是我定义依赖关系的方式:

    <dependency>
<groupId>de.dornathal</groupId>
<artifactId>core</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.dornathal</groupId>
<artifactId>android</artifactId>
<type>apk</type>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.dornathal</groupId>
<artifactId>android</artifactId>
<type>jar</type>
<version>0.1-SNAPSHOT</version>
</dependency>

我没有定义任何范围,所以我认为所有类都应该在运行时和测试范围内可用。

DBHelper 类包含public static final String[]之类的

public static final String[] SET_ACTION_LIST = {KEY_ID, KEY_PARENT_ID, KEY_ACTION_ID, KEY_SORT_ORDER, KEY_TYPE_ENUM};

这个字段被应用项目的一个类调用(在onCreateMethod中):

result += printDatabase(db, DBHelper.TABLE_ACTION_LIST, DBHelper.SET_ACTION_LIST);

奇怪的是,这一行并不是访问 DBHelper 字段的第一行。有十几个类似的行访问 DBHelper 的一个字段(但当然有不同的字段名)。

由于应用程序运行良好,以上所有内容都不会不正确。

最后我用 robotium 进行了仪器测试:

    @Override
public void setUp() throws Exception {
this.setActivityInitialTouchMode(false);
solo = new Solo(getInstrumentation(), getActivity());
}

@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}


public void testOpenActivitiesOfMain(){
solo.clickOnView(solo.getView(R.id.ShowDatabase));
solo.assertCurrentActivity("Does not start the Database",Database.class);
solo.goBack();
solo.assertCurrentActivity("Does not return from Database", MainPage.class);}

现在有以下错误输出:专家:

[INFO] 01498A031900801A_samsung_GalaxyNexus :   Running instrumentation tests in de.dornathal.planyourmeals.android.test
[INFO] 01498A031900801A_samsung_GalaxyNexus : Run started: de.dornathal.planyourmeals.android.test, 4 tests:
[INFO] 01498A031900801A_samsung_GalaxyNexus : Start [1/4]: de.dornathal.planyourmeals.android.test.MainPageTest#testOpenActivitiesOfMain
[INFO] 01498A031900801A_samsung_GalaxyNexus : ERROR:de.dornathal.planyourmeals.android.test.MainPageTest#testOpenActivitiesOfMain
[INFO] 01498A031900801A_samsung_GalaxyNexus : Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.NoSuchFieldError''. Check device logcat for details
[INFO] 01498A031900801A_samsung_GalaxyNexus : End [1/4]: de.dornathal.planyourmeals.android.test.MainPageTest#testOpenActivitiesOfMain
[INFO] 01498A031900801A_samsung_GalaxyNexus : Run failed: Instrumentation run failed due to 'java.lang.NoSuchFieldError'
[INFO] 01498A031900801A_samsung_GalaxyNexus : Run ended: 0 ms
[ERROR] 01498A031900801A_samsung_GalaxyNexus : FAILURES!!!

logcat 说

11-16 12:07:36.529: ERROR/AndroidRuntime(4581): FATAL EXCEPTION: main
java.lang.NoSuchFieldError: de.dornathal.planyourmeals.core.database.DBHelper.SET_ACTION_LIST
at de.dornathal.planyourmeals.android.view.DatabasePager$DatabaseFragment.onCreateView(DatabasePager.java:42)

如果有人对这如何工作或可能发生实际错误的地方有任何建议,我非常感谢任何建议。

MFG 多纳 Solr

最佳答案

NoSuchMethodError 或 NoSuchFieldError 通常在更新类但未完成重新编译时抛出。

事实证明,我确实更改了我的库项目的 SNAPSHOT 版本,以便 maven 加载旧版本。

如果您想测试您的项目是否存在同样的问题,请尝试从您的本地 Maven 存储库中删除包含 SNAPSHOT 版本的文件夹。 ( C:\Users\<username>\.m2\...\yourLibrary\ )

如果你在那之后重新运行 maven 并且你得到一个错误说 maven 没有找到那个 SNAPSHOT.jar,检查你的 poms 中的所有版本号是否匹配。

关于android - 使用 Maven 进行 Android 集成测试中的 NoSuchFieldError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com