2013-07-11 9 views
25


Sto lavorando con Android Studio e devo aggiungere un test di unità al mio progetto.
Ho letto vari tutorial, ma nulla mi ha abbandonato.
Il mio problema è:
TestXMLParser.java:
AssertionFailedError: <class> non ha costruttore pubblico

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

quando l'eseguo, vedo questo messaggio:

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) 

Io davvero non so perché. Altri test JUnit funziona bene, per esempio quando uso:

public class TestXMLParser extends AndroidTestCase { ... 

nell'intestazione, questo funziona e le prove sono in esecuzione in modo corretto.
Ma Ho bisogno di usare il contesto (come attività) per eseguire altro codice (in classe Controller).

Avete qualche idea di come sistemarlo?
Grazie per i vostri commenti.

risposta

44

È necessario aggiungere un costruttore predefinito o un costruttore che utilizza un parametro come String. L'aggiunta dei seguenti costruttore di default con una chiamata al costruttore della classe base dovrebbe funzionare:

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

Grazie per un commento, ma non è risposta corretta. Questo costruttore non è disponibile in ActivityInstrumentationTestCase2. – dusanjencik

+9

Sei corretto - ActivityInstrumentationTestCase2 non espone un costruttore predefinito. Invece, si crea un costruttore predefinito per la classe e quindi si chiama super con parametri validi per uno dei costruttori ActivityInstrumentationTestCase2, uno dei quali accetta una classe, e si passa alla classe sotto test. Ho trovato qualcosa di simile anche qui: http://stackoverflow.com/questions/2346734/trying-to-run-android-junit-tests-in-eclipse-fails –

+2

Android Studio si muove così velocemente che metà dei libri pubblicati che hai speso soldi e molti degli esempi di internet semplicemente non funzionano. – nimbusgb

Problemi correlati