116 votes

Obtenir le contexte du projet de test dans le cas de test junit Android

Est-ce que quelqu'un sait comment on peut obtenir le contexte de la Projet de test dans le scénario de test Android junit (extends AndroidTestCase).

Note : Le test n'est PAS un test d'instrumentation.

Note 2 : J'ai besoin du contexte du projet de test, pas du contexte de l'application réelle qui est testée.

J'en ai besoin pour charger certains fichiers à partir des actifs du projet de test.

0 votes

Pourquoi ne pouvez-vous pas simplement utiliser InstrumentationTestCase ?

1 votes

Parce que je teste les services, pas l'interface utilisateur.

1 votes

Il y a une meilleure réponse ici : [Utiliser AndroidTestCase au lieu d'un test JUnit][1] [1] : stackoverflow.com/questions/3170706/

3voto

tomrozb Points 2238

C'est la façon correcte d'obtenir le Contexte. Les autres méthodes sont déjà dépréciées

import androidx.test.platform.app.InstrumentationRegistry

InstrumentationRegistry.getInstrumentation().context

3voto

eoinzy Points 525
import androidx.test.core.app.ApplicationProvider;

    private Context context = ApplicationProvider.getApplicationContext();

1voto

Hitesh Sahu Points 12561

@RunWith(AndroidJUnit4.class) vous permet d'utiliser le contexte Android

/**
 * Instrumented test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
        assertEquals("com.android.systemui", appContext.getPackageName());
    }

}

Vous pouvez même l'exécuter sur le fil principal en utilisant runOnMainSync . Voici la solution complète :

@RunWith(AndroidJUnit4::class)
class AwesomeViewModelTest {

    @Test
    fun testHandler() {

        getInstrumentation().runOnMainSync(Runnable {
            val context = InstrumentationRegistry.getInstrumentation().targetContext

          // Here you can call methods which have Handler

        })
    }

}

0voto

Yoni Keren Points 130

Les autres réponses sont dépassées. Actuellement, chaque fois que vous étendez AndroidTestCase, il existe un objet Contexte mContext que vous pouvez utiliser.

0voto

Sebastien FERRAND Points 321

Pour ceux qui rencontrent ces problèmes lors de la création de tests automatisés, vous devez faire ceci :

    Context instrumentationContext;

    @Before
    public void method() {

        instrumentationContext = InstrumentationRegistry.getInstrumentation().getContext();

        MultiDex.install(instrumentationContext);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X