Problem mit Junit Test

  • 2 Antworten
  • Letztes Antwortdatum
Micka

Micka

Fortgeschrittenes Mitglied
1
Hallo,
ich arbeite zurzeit an einem Projekt was ich leider aus Datenschutzgründen nicht näher beschreiben kann. Für mein Problem spielen die Inhalte aber zum Glück auch keine Rolle. Ich habe derzeit ein Problem mit einem JUnitTest das ganz unabhängig davon ist. Ich habe schon einiges gegoogelt, habe auch hier im Forum nach JUnit gesucht aber nichts passendes gefunden.

Nun zu meinem Problem. Ich habe eine Activity die neben einigen Buttons auch ein EditText beinhaltet. Um meine Activity zu testen nutze ich ein ActivityInstrumentationTestCase2.
Zunächst wollte ich dem EditText einen Text senden und dann prüfen ob der auch wirklich richtig ankommt. Dieser Test schlägt leider sehr oft fehl, aber von ca 10 Versuchen läuft er einmal durch. Nun frage ich mich was ich falsch gemacht habe. Anbei mal mein kompletter Testcode.
Code:
package de.fhdo.gerding.ludvikdatabaseapp;

import android.test.ActivityInstrumentationTestCase2;
import android.test.TouchUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;

public class MainActivityTests extends ActivityInstrumentationTestCase2<MainActivity>
{
    private MainActivity mainActivity;
    private EditText tablenameEditText;
    private Button btnLocalTable;
    private Button btnSyncTables;
    private Button btnResetDatabases;
    private ScrollView scrollview_tv;

    public MainActivityTests()
    {
        super(MainActivity.class);
    }
    public void testActivityExists()
    {
        MainActivity activity = getActivity();
        assertNotNull(activity);
    }
    public void testMainActivity() throws InterruptedException
    {
        MainActivity activity = getActivity();
        tablenameEditText = (EditText) activity.findViewById(R.id.editText_tablename);
        getInstrumentation().runOnMainSync(new Runnable() {
            @Override
            public void run() {
                tablenameEditText.requestFocus();
            }
        });

        getInstrumentation().waitForIdleSync();
        getInstrumentation().sendStringSync("test");
        //assertEquals("test", tablenameEditText.getText().toString());
        getInstrumentation().waitForIdleSync();

        tablenameEditText = (EditText) activity.findViewById(R.id.editText_tablename);
        assertEquals("test", tablenameEditText.getText().toString());

        btnLocalTable = (Button) activity.findViewById(R.id.button_lokal_table);
        TouchUtils.clickView(this, btnLocalTable);
    }
}

Das erneute zuweisen des EditText ist unnütz, bei meiner suche bin ich auf verschiedene wege gestoßen, bei einigen war es so. Ändert aber leider nichts am Testergebnis.

Ich würde mich freuen wenn mir jemand zeigen kann wo das Problem liegt, man lernt ja nie aus und aus Fehlern lernt man am besten.

Gruß
Micka
 
Ich glaube du gibtst dem EditText noch nicht genug zeit sich aufzubauen .... Das kenne ich zum Beispiel wenn ich einer View im Code eine größe zugeben will mache ich das erst später aus einem Thread heraus wenn die onCreate Methode schon durchgelaufen ist sonst passiert da nichts wenn ich kurz nachdem ich das Objekt entweder mit New konstruiert oder aus einem XML inflatet habe bzw eine layout schon gesetzte habe. Da braucht Android einfach zu lange um seine Hierarchien aufzubauen...

Vllt den Assert mal ein bisschen zurückstellen und später prüfen bzw. den Edittext etwas früher schon versuchen in den speciher zu bringen?!
 
  • Danke
Reaktionen: Micka
okay danke, werde das mal testen. Mein Test endet momentan noch da, werde erstmal weiter Tests schreiben und gucken wo ich den assert dann einbaue.

Gibt es keine Möglichkeit zu warten bis der Edittext sich aufgebaut hat? Der weitere Test brauch den Text des Edittext's, deswegen prüfe ich überhaupt ob der stimmt.
[DOUBLEPOST=1444037561,1444034025][/DOUBLEPOST]Habe meinen Test jetzt ein wenig abgeändert. Statt den Text über "getInstrumentation().sendStringSync("test");" zu senden habe ich ihn direkt gesetzt, das klappt.
getInstrumentation().runOnMainSync(new Runnable() {
@Overridepublic void run() {
tablenameEditText.setText("test");
}
});
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.358
swa00
swa00
Mr-Fisch
Antworten
0
Aufrufe
503
Mr-Fisch
Mr-Fisch
Mr-Fisch
Antworten
8
Aufrufe
1.005
Mr-Fisch
Mr-Fisch
migi01
Antworten
26
Aufrufe
1.985
migi01
migi01
6
Antworten
4
Aufrufe
939
626100
6
Zurück
Oben Unten