我需要访问 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 不是您从应用程序中实例化的东西。