Récupère le contexte d’un projet de test dans un cas de test Android junit

Est-ce que quelqu’un sait comment obtenir le contexte du projet Test dans un cas de test Android (étend AndroidTestCase).

Remarque: le test N’EST PAS un test d’instrumentation.

Note 2: J’ai besoin du contexte du projet de test et non du contexte de l’application testée.

J’en ai besoin pour charger des fichiers à partir d’éléments du projet de test.

Il y a une nouvelle approche avec Android Testing Support Library (actuellement com.android.support.test: runner: 0.3).

@RunWith(AndroidJUnit4.class) @MediumTest public class SomeClassTest { private Context instrumentationCtx; @Before public void setup() { instrumentationCtx = InstrumentationRegistry.getContext(); } @Test public void someTest() { ... 

Si vous voulez aussi exécuter le contexte de l’application:

 InstrumentationRegistry.getTargetContext(); 

Regardez ici: Quelle est la différence entre getTargetContext () et getContext (sur InstrumentationRegistry)?

Après quelques recherches, la seule solution de travail semble être celle déjà décrite par York. Vous devrez étendre InstrumentationTestCase, puis accéder au contexte de votre application de test à l’aide de getInstrumentation (). GetContext () – Voici un bref extrait de code utilisant les suggestions ci-dessus:

 public class PrintoutPullParserTest extends InstrumentationTestCase { public void testParsing() throws Exception { PrintoutPullParser parser = new PrintoutPullParser(); parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration)); } } 

Comme vous pouvez le lire dans le code source AndroidTestCase , la méthode getTestContext() est masquée.

 /** * @hide */ public Context getTestContext() { return mTestContext; } 

Vous pouvez contourner l’annotation @hide utilisant la reflection.

Ajoutez simplement la méthode suivante dans votre AndroidTestCase :

 /** * @return The {@link Context} of the test project. */ private Context getTestContext() { try { Method getTestContext = ServiceTestCase.class.getMethod("getTestContext"); return (Context) getTestContext.invoke(this); } catch (final Exception exception) { exception.printStackTrace(); return null; } } 

Ensuite, appelez getTestContext() tout moment. 🙂

Vous devriez étendre depuis AndroidTestCase au lieu de TestCase.

Présentation de la classe AndroidTestCase
Étendez cela si vous avez besoin d’accéder à des ressources ou à d’autres choses qui dépendent du contexte d’activité.

AndroidTestCase – Développeurs Android

Si vous avez juste besoin d’accéder aux ressources de votre projet, vous pouvez utiliser la méthode getActivity () de la classe ActivityInstrumentationTestCase2 :

  //... private YourActivityClass mActivity; @Override protected void setUp() throws Exception { //... mActivity = getActivity(); } //... public void testAccessToResources() { Ssortingng[] valueList; valueList = mActivity.getResources().getSsortingngArray( com.yourporject.R.array.test_choices); } 

Les autres réponses sont obsolètes. À l’heure actuelle, chaque fois que vous étendez AndroidTestCase, vous pouvez utiliser l’object mContext Context.