14

我需要访问 JUnit 测试的 Android 上下文。

我曾尝试使用 MockContext 并扩展 AndroidTestCase 但每次我收到一条错误消息(存根!)

4

5 回答 5

23

使用 AndroidTestCase 代替 JUnit 测试怎么样?AndroidTestCase 将提供一个带有 getContext() 的 Context,可以在需要的地方使用。

于 2010-09-09T19:29:38.930 回答
5

另一种无需扩展 即可从 JUnit 访问上下文的方法AndroidTestCase是用于Rule启动正在测试的活动。规则是为每个测试方法执行的拦截器,将在@Before方法中的任何设置代码之前运行。规则是作为ActivityInstrumentationTestCase2.

@RunWith(AndroidJUnit4.class)
@SmallTest
public class ConnectivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testIsConnected() throws Exception {
        Context context = mActivityRule.getActivity().getBaseContext();
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean connected = cm.getActiveNetworkInfo().isConnectedOrConnecting();
        Assert.assertEquals(connected, ConnectionUtils.isConnected(context));
    }
}
于 2015-05-11T18:29:35.887 回答
2

如果您的测试是仪器测试(在模拟器或设备上运行),您可以简单地使用

Context appContext = InstrumentationRegistry.getTargetContext();

依赖是:

androidTestCompile 'com.android.support.test:runner:0.5'
于 2016-07-01T02:29:49.413 回答
0

当您的测试类扩展 ActivityInstrumentationTestCase2 时,试试这个:

InputStream is = null;
try {
    is = getInstrumentation().getContext().getAssets().open("your.file");
} catch (IOException e) {
    Log.d("Error", "Error during file opening!!!");
}
于 2012-09-11T10:32:37.890 回答
-1

每个 Activity 都是 Context 的子类,所以当你需要 Context 时,你必须使用你的 Activity。类 Context 不是您从应用程序中实例化的东西。

于 2010-07-03T07:55:01.787 回答