【发布时间】:2010-07-03 07:36:22
【问题描述】:
我需要访问 JUnit 测试的 Android 上下文。
我曾尝试使用 MockContext 并扩展 AndroidTestCase,但每次我收到一条错误消息(存根!)
【问题讨论】:
我需要访问 JUnit 测试的 Android 上下文。
我曾尝试使用 MockContext 并扩展 AndroidTestCase,但每次我收到一条错误消息(存根!)
【问题讨论】:
使用 AndroidTestCase 代替 JUnit 测试怎么样? AndroidTestCase 将提供一个带有 getContext() 的 Context,可以在需要的地方使用。
【讨论】:
从 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));
}
}
【讨论】:
如果您的测试是仪器测试(在模拟器或设备上运行),您可以简单地使用
Context appContext = InstrumentationRegistry.getTargetContext();
依赖是:
androidTestCompile 'com.android.support.test:runner:0.5'
【讨论】:
当你的测试类扩展 ActivityInstrumentationTestCase2 时试试这个:
InputStream is = null;
try {
is = getInstrumentation().getContext().getAssets().open("your.file");
} catch (IOException e) {
Log.d("Error", "Error during file opening!!!");
}
【讨论】:
每个 Activity 都是 Context 的子类,因此在需要 Context 时必须使用您的 Activity。类 Context 不是您从应用程序中实例化的东西。
【讨论】: