2013-07-11 6 views
25


Ich arbeite mit Android Studio und ich muss eine Einheit Tests zu meinem Projekt hinzufügen.
Ich las verschiedene Tutorials, aber nichts half mir.
Mein Problem ist:
TestXMLParser.java:
AssertionFailedError: <class> hat keinen öffentlichen Konstruktor

public class TestXMLParser extends ActivityInstrumentationTestCase2<HomePageActivity> { 

public TestXMLParser(Class<HomePageActivity> activityClass) { 
    super(activityClass); 
} 

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

    //Controller.init((Activity)getContext()); 
} 

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

public void testTrue() throws Exception { 
    assertTrue(true); 
} 
... 
} 

Wenn ich es laufen, sehe ich diese Meldung:

junit.framework.AssertionFailedError: Class cz.cvut.kosapp.jUnitTests.TestXMLParser has no public constructor TestCase(String name) or TestCase() 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661) 

Ich weiß wirklich nicht, warum. Andere JUnit-Tests gut funktioniert, zum Beispiel, wenn ich benutze:

public class TestXMLParser extends AndroidTestCase { ... 

in Header, das funktioniert und Tests korrekt ausgeführt werden.
Aber Ich brauche den Kontext (als eine Aktivität), um anderen Code (in der Controller-Klasse) auszuführen.

Haben Sie eine Idee, wie es zu beheben?
Vielen Dank für Ihre Kommentare.

Antwort

44

Sie müssen entweder einen Standardkonstruktor oder einen Konstruktor hinzufügen, die eine String als Parameter annimmt. Das Hinzufügen des folgenden Standardkonstruktors mit einem Aufruf des Basisklassenkonstruktors sollte funktionieren:

public TestXMLParser() { 
    super(HomePageActivity.class); 
} 
+0

Danke für den Kommentar, aber es ist nicht die richtige Antwort. Dieser Konstruktor ist in ActivityInstrumentationTestCase2 nicht verfügbar. – dusanjencik

+9

Sie haben Recht - ActivityInstrumentationTestCase2 stellt keinen Standardkonstruktor zur Verfügung. Stattdessen erstellen Sie einen Standardkonstruktor für Ihre Klasse und rufen dann super mit gültigen Parametern für einen der ActivityInstrumentationTestCase2-Konstruktoren auf, von denen einer eine Klasse akzeptiert, und Sie übergeben die zu testende Klasse. Ähnliches habe ich auch hier gefunden: http://stackoverflow.com/questions/2346734/trying-to-run-android-junit-tests-in-eclipse-fails –

+2

Android Studio bewegt sich so schnell, dass die Hälfte der veröffentlichten Bücher das ist Sie haben Geld ausgegeben und viele Internetbeispiele funktionieren einfach nicht. – nimbusgb

Verwandte Themen