Тестовый запуск не выполнен: инструментальный запуск завершился неудачно из-за 'Процесс сбой.'при тестировании нескольких действий Android - PullRequest
13 голосов
/ 27 марта 2012

У меня проблема с тестированием моего приложения для Android.
У меня есть 2 класса testCase, если я выполняю их отдельно, проблем нет, тесты запускаются до конца.Но если я сделаю «щелчок правой кнопкой мыши» по своему тестовому проекту и выберу «Выполнить как Android Junit Test», я получу сообщение

 Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554
 [2012-03-27 15:56:27 - matroussedemaquillageTest] Collecting test information
 [2012-03-27 15:56:31 - matroussedemaquillageTest] Test run failed: Instrumentation run  failed due to 'Process crashed.'

см. Ниже для моих двух testClasses:

первый тестовый класс

package fr.smardine.matroussedemaquillage.test;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.ImageSwitcher;
import fr.smardine.matroussedemaquillage.EntryPoint;

public class EntryPointTest extends
    ActivityInstrumentationTestCase2<EntryPoint> {

private EntryPoint mActivity;
    private ImageSwitcher mSwitcher;

    public EntryPointTest() {
        super("fr.smardine.matroussedemaquillage",
                fr.smardine.matroussedemaquillage.EntryPoint.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void test2() {
        assertEquals(2, 2);
    }
}

и второй:

package fr.smardine.matroussedemaquillage.test;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.ImageView;
import fr.smardine.matroussedemaquillage.Main;

public class MainTest extends ActivityInstrumentationTestCase2<Main> {

    private Main mActivity;
    private ImageView btRemplir;
    private ImageView btPerime;
    private ImageView btNotes;

    public MainTest() {
        super("fr.smardine.matroussedemaquillage",
                fr.smardine.matroussedemaquillage.Main.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }


    public void test1() {
        assertEquals(1, 1);
    }
}

Как вы можете видеть, мой тест не так уж сложен, даже если я "стираю пользовательские данные" при запуске своего эмулятора, то же сообщение появляется, если я выполню два теста.
О, кстати, эмулятор работает под Android 2.1, и это мой файл AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fr.smardine.matroussedemaquillage.test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />

<instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="fr.smardine.matroussedemaquillage" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <uses-library android:name="android.test.runner" />
</application>

</manifest>

Редактировать: мой журналкошка:

I/ActivityManager(64): Start proc fr.smardine.matroussedemaquillage for added application fr.smardine.matroussedemaquillage: pid=510 uid=10029 gids={3003, 1015} 
D/ddm-heap(510): Got feature list request D/dalvikvm(510): GC freed 5427 objects / 420224 bytes in 90ms 
D/dalvikvm(510): GC freed 6498 objects / 506616 bytes in 79ms 
D/dalvikvm(510): GC freed 7048 objects / 567464 bytes in 90ms 
D/dalvikvm(510): GC freed 8628 objects / 503840 bytes in 73ms 
I/System.out(510): Failed to open test.properties 
I/AndroidRuntime(510): AndroidRuntime onExit calling exit(-1) –
D/Zygote(30): Process 510 exited cleanly (255) 
I/ActivityManager(64): Process fr.smardine.matroussedemaquillage (pid 510) has died. 
W/ActivityManager(64): Crash of app fr.smardine.matroussedemaquillage running instrumentation ComponentInfo{fr.smardine.matroussedemaquillage.test/android.test.Instrumentatio‌​nTestRunner} 
D/ActivityManager(64): Uninstalling process fr.smardine.matroussedemaquillage
D/AndroidRuntime(504): Shutting down VM 
D/dalvikvm(504): DestroyJavaVM waiting for non-daemon threads to exit 
D/dalvikvm(504): DestroyJavaVM shutting VM down
D/dalvikvm(504): HeapWorker thread shutting down 
D/dalvikvm(504): HeapWorker thread has shut down 
D/jdwp(504): JDWP shutting down net... 
D/jdwp(504): Got wake-up signal, bailing out of select 
I/dalvikvm(504): Debugger has detached; object registry had 1 entries 
D/dalvikvm(504): VM cleaning up 
D/dalvikvm(504): LinearAlloc 0x0 used 643668 of 5242880 (12%) 
I/dalvikvm(504): JNI: AttachCurrentThread (from ???.???) 
E/AndroidRuntime(504): ERROR: thread attach failed'

Ответы [ 4 ]

3 голосов
/ 12 октября 2012

Раньше я получал эту ошибку, когда использовал System.exit (0) в своем тесте Activity на onFinish, как показано ниже:

@Override
    public void finish() {
        super.finish();
        System.exit(0);

    }

Так что проверьте метод onFinish вашей Основной деятельности.

1 голос
/ 04 августа 2014

Я также столкнулся с подобной проблемой при запуске моих инструментов Android. В конце концов я пришел к выводу, что проблема в System.exit (0) .

Теперь причина, почему это вызывает проблему Согласно его документации

Заставляет ВМ останавливаться и выходить из программы.

Когда System.exit (0) исполняется, весь остальной код, написанный после того, как этот код будет пропущен, и класс активности будет завершен и перейдет к сборке мусора. Поскольку инструментарий основан на методе жизненного цикла действия, класс действия является сборщиком мусора, поэтому нет возможности вызывать его методы, если сам объект не существует.

Поэтому избегайте использования System.exit (0), если вы хотите выполнить модульное тестирование приложения, вместо этого используйте метод finish () .

1 голос
/ 22 апреля 2013

Я также столкнулся с этой ошибкой.Однако я обнаружил, что мой набор тестов действительно работает, единственная проблема заключалась в том, что утверждение в моем тестовом коде не удалось.

Я заглянул в LogCat и отфильтровал эти помеченные сообщения «TestRunner» и нашел сообщение об ошибке подтверждения среди других журналов тестирования.

0 голосов
/ 05 января 2016

В случае, если кто-то еще также использует Robotium и увидел ошибку: я забыл tearDown открытое действие, и это привело к ошибке, как описано выше.

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