2016-05-09 6 views
0

Ich habe viele Beiträge gelesen und die Dokumentation zu Android Instrumentation Tests gelesen, kann aber meinen Code nicht zum Laufen bringen.Gültiger (nicht null) Kontext für Android-Instrumentierungstest erhalten

Mein Szenario ist, dass ich ein Mock Context-Objekt nicht verwenden kann, ich brauche ein gültiges.

Ich habe versucht mit:

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

    setActivityInitialTouchMode(true); 
    // Injecting the Instrumentation instance is required 
    // for your test to run with AndroidJUnitRunner. 
    injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
    _context = getActivity(); 

    assertThat(_context, isA(Context.class)); 
} 

Aber ich bekomme

java.lang.RuntimeException: Es konnte keine Aktivität starten

Ich habe versucht, meinen Test InstrumentationTest verlängern mit und unter Verwendung von getInstrumentation(). GetContext()

Aber das ist auch null.

Von was ich verstehe Instrumentation Tests sind für genau das: wenn Sie die Anwendung (d. H. Kontext) verwenden müssen.

Wissen Sie also, wie ich in der Umgebung von Android Studio 2.0 mit junit4 auf ein gültiges Kontextobjekt zugreifen kann, das nicht null ist?

Hier ist mein aktueller bester Versuch:

@RunWith(AndroidJUnit4.class) 
@SmallTest 
public class StartWorkoutRadialProgressBarTest extends ActivityInstrumentationTestCase2 
{ 
    Context _context; 

    public StartWorkoutRadialProgressBarTest() 
    { 
     super(StartWorkoutRadialProgressBar.class); 
    } 

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

     setActivityInitialTouchMode(true); 
     // Injecting the Instrumentation instance is required 
     // for your test to run with AndroidJUnitRunner. 
     injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
     _context = getActivity(); 

     assertThat(_context, isA(Context.class)); 
    } 

    @Test 
    public void initialization() 
    { 
     StartWorkoutRadialProgressBar bar = new StartWorkoutRadialProgressBar(100,100, _context); 

     Assert.assertThat(4, is(4)); 
    } 
} 

Hinweis: context = new MockContext() Verwendung nicht funktioniert, weil ich einen Fehler die Bibliothek, eine Ressource zu nennen versucht.

+1

"java.lang.RuntimeException: Aktivität konnte nicht gestartet werden" - bitte zeigen Sie den gesamten Stack-Trace an. Außerdem demonstriert FWIW, [dieses Beispielprojekt] (https://github.com/commonsguy/cw-omnibus/tree/master/Testing/JUnit4) die Verwendung der veralteten "ActivityInstrumentationTestCase2" mit JUnit4, zusammen mit "InstrumentationRegistry.getTargetContext () 'und' ActivityTestRule'. – CommonsWare

+1

Ich habe es gerade jetzt herausgefunden. Es war mein Konstruktor, es muss eine Aktivitätsklasse sein (die ActivityInstrumentationTestCase2 liefert nicht den Kontext, den ich brauche) – Aggressor

Antwort

0

Mein Konstruktor war für eine Klasse, die keine Aktivität war:

public StartWorkoutRadialProgressBarTest() 
{ 
    super(StartWorkoutRadialProgressBarTest.class); 
} 

Als ich dies geändert nur eine generische Aktivität Klasse I erstellt und A_Testing nannte es funktionierte:

public StartWorkoutRadialProgressBarTest() 
{ 
    super(A_Testing.class); 
} 

So ist es stellt sich heraus, dass Sie mit einer Aktivitätsklasse initialisieren müssen, da ActivityInstrumentationTestCase2 kein gültiges Kontextobjekt mit einem getActivity() - Aufruf bereitstellt.