2013-11-16 3 views
1

У меня есть проект Android Maven, и я хочу реализовать приборный тест, который должен управляться maven, конечно.NoSuchFieldError в Android Integration test с maven

Однако я получаю NoSuchMethodError и NoSuchFieldError.

У меня есть три модуля в моем проекте maven.

  1. Ядро библиотеки, в которой я определил класс DBHelper
  2. андроид приложения проекта.
  3. Антенный контрольно-измерительный прибор.

Когда я выполняю mvn clean install, maven успешно выполняет все, пока андроид-контрольно-измерительный прибор не будет выполнен на реальном устройстве 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[] «S как

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);} 

Теперь существуют следующие выходы ошибок: Maven:

[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) 

Если у кого-то есть предложение о том, как это может работать или где фактическая ошибка c ould. Я очень благодарен вам за любые советы.

MFG Dornathal

ответ

1

NoSuchMethodError или NoSuchFieldError часто выгоняют, когда был обновлен класс, но не является полной перекомпиляции.

Оказалось, что я изменил версию моего проекта библиотеки SNAPSHOT, чтобы maven загрузил старую версию.

Если вы хотите проверить, может ли быть такая же проблема с вашим проектом, попробуйте удалить папку с версиями SNAPSHOT из вашего локального репозитория maven. (C:\Users\<username>\.m2\...\yourLibrary\)

Если вы повторно запустите maven после этого, и вы получите сообщение об ошибке, заявив, что maven не нашел SNAPSHOT.jar, проверьте, соответствуют ли все номера версий вашим псам.

Смежные вопросы