2010-09-09 3 views
5

Ich habe versucht, einen Testfall zu machen, der intstrumentationtestcase erweitert, und wann immer ich getInstrumentation() anrufe, gibt es eine Nullinstanz von Instrumentation anstelle von Instrumentation zurück Ich möchte nichts tun. Ich habe die Berechtigung auch im Manifest festgelegt, obwohl ich nur die Automatisierung für die gleiche App teste, in der dieser Fall ausgeführt wird ... irgendwelche Ideen?android instrumentation test case - getinstrumentation() gibt null zurück

Antwort

2

Ich hatte ein ähnliches Problem und es scheint, dass die Methode getInstrumentation() eine gültige Instrumentierung erst zurückgibt, nachdem die setUp-Methode der Basisklasse (InstrumentationTestCase) aufgerufen wurde. Bitte schauen Sie auf den Code unten und überprüfen Sie die LogCat Debug-Nachrichten:

import android.app.Instrumentation; 
import android.test.InstrumentationTestCase; 
import android.util.Log; 

public class TestInstrumentation extends InstrumentationTestCase { 

private static final String LOG_TAG = BrowseLocationsTest.class.getSimpleName(); 

private Instrumentation instr; 

public TestInstrumentation() { 
    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "TestInstrumentation instrumentation: " + instr); 
} 

@Override 
protected void setUp() throws Exception { 
    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "setUp instrumentation: " + instr); 

    super.setUp(); 

    instr = getInstrumentation(); 
    Log.d(LOG_TAG, "setUp instrumentation: " + instr); 
} 

public void testInstrumentation() { 
    Log.d(LOG_TAG, "testInstrumentation instrumentation: " + instr); 
} 
} 

Die Instrumentierung direkt an Ort und Stelle ist, wie direkt nach dem super.setUp() -Aufruf erwartet.

5

Sie müssen programmatisch die Instrumentierung injizieren durch injectInstrumentation(InstrumentationRegistry.getInstrumentation()); Aufruf InstrumentationRegistry aus dem offiziellen Android Test-Support-lib mit: 0,1

0

Ich denke, was Sie wirklich brauchen, ist Kontext, in JUnit4, wir Kontext von InstrumentationRegistry.getContext();

bekommen
2

Hatte das gleiche Problem bei der Verwendung der Testing Support Library mit der '@ RunWith (AndroidJUnit4.class)' Annotation, obwohl ich sicher, meine Instrumentierung in der setUp() Methode wie von @Gallal und @Dariusz Gadomski angezeigt, nur es injizieren weiterhin NullPointerExceptions zu werfen.

Ich habe vergessen, die @Before Annotation auf meine Setup-Methode, so dass jUnit4 es nicht ausgeführt, während zuvor mit der jUnit3 basierten Instrumentation Tests ausgeführt hätte. Da ich die Instrumentierungsinjektion in setUp() implementiert habe, wurde sie nie injiziert, obwohl der Code so aussah, als hätte er ihn injizieren sollen.

Also statt

@Override 
protected void setUp() throws Exception { 
... 

Seien Sie sicher,

@Before 
public void setUp() throws Exception { 
    super.setUp(); 
    injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
} 

stattdessen zu verwenden.