2013-07-11 14 views
25


Pracuję z Androidem Studio i muszę dodać testy jednostkowe do mojego projektu.
Przeczytałem różne tutoriale, ale nic mnie nie skrzywdziło.
Mój problem jest:
TestXMLParser.java:
AssertionFailedError: <class> nie ma publicznego konstruktora

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

Gdy go widzę komunikat:

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) 

ja naprawdę nie wiem, dlaczego. Inne testy JUnit działa dobrze, na przykład podczas korzystania z:

public class TestXMLParser extends AndroidTestCase { ... 

w nagłówku, to działa i testy są wyświetlane poprawnie.
Ale Potrzebuję użyć kontekstu (jako działania), aby uruchomić inny kod (w klasie kontrolera).

Czy masz pojęcie, jak to naprawić?
Dziękuję za uwagi.

Odpowiedz

44

Należy dodać domyślny konstruktor lub konstruktor, który jako parametr przyjmuje wartość String. Dodanie następującego domyślnego konstruktora z wywołaniem do konstruktora klasy podstawowej powinno zadziałać:

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

Dzięki za komentarz, ale nie jest to poprawna odpowiedź. Ten konstruktor nie jest dostępny w ActivityInstrumentationTestCase2. – dusanjencik

+9

Masz rację - ActivityInstrumentationTestCase2 nie ujawnia domyślnego konstruktora. Zamiast tego tworzysz domyślny konstruktor dla swojej klasy, a następnie wywołujesz super z poprawnymi parametrami dla jednego z konstruktorów ActivityInstrumentationTestCase2 - jednego z nich, który akceptuje klasę - i przekazujesz testowaną klasę. Znalazłem też coś podobnego: http://stackoverflow.com/questions/2346734/trying-to-run-android-junit-tests-in-eclipse-fails –

+2

Android Studio porusza się tak szybko, że połowa opublikowanych książek Wydałeś pieniądze i wiele przykładów internetu po prostu nie działa. – nimbusgb

Powiązane problemy