2010-09-09 4 views
5

J'ai essayé de faire un cas de test étendant intstrumentationtestcase, et chaque fois que j'appelle getinstrumentation(), il retourne une instance nulle d'instrumentation au lieu d'une instrumentation, ce qui rend l'automatisation Je veux faire l'inutile. J'ai aussi la permission dans le manifeste même si je ne fais que tester l'automatisation sur la même application sur laquelle cette affaire va tourner ... des idées?android instrumentation cas de test - getinstrumentation() retournant null

Répondre

2

J'ai rencontré un problème similaire et il semble que la méthode getInstrumentation() renvoie une instrumentation valide uniquement après l'appel de la méthode setBase (InstrumentationTestCase) setUp. S'il vous plaît consulter le code ci-dessous et vérifiez les messages de débogage logcat:

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

L'instrumentation est bien en place comme prévu juste après l'appel super.setUp().

5

Vous devez injecter l'instrumentation programme en appelant injectInstrumentation(InstrumentationRegistry.getInstrumentation()); en utilisant InstrumentationRegistry de l'Android officiel test-support-lib: 0,1

0

Je pense que ce que vous avez vraiment besoin est contexte, junit4, nous pouvons obtenir contexte par InstrumentationRegistry.getContext();

2

J'ai eu le même problème en utilisant la bibliothèque de prise en charge des tests avec l'annotation @RunWith (AndroidJUnit4.class), bien que je me suis assuré d'injecter mon instrument dans la méthode setUp() comme indiqué par @Gallal et @Dariusz Gadomski, seulement continué à lancer NullPointerExceptions.

Il s'avère que j'ai oublié d'inclure l'annotation @Before sur ma méthode d'installation, donc jUnit4 ne l'a pas exécuté, alors qu'avant avec les tests Instrumentation basés sur jUnit3, il aurait été exécuté. Depuis que j'ai implémenté l'injection d'instrumentation dans setUp(), elle n'a jamais été injectée même si le code semblait l'avoir injecté.

Ainsi, au lieu de

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

Assurez-vous d'utiliser

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

à la place.