【问题标题】:How do you get hold of an Android Context for a Junit test from a Java Project?如何从 Java 项目中获取用于 Junit 测试的 Android 上下文?
【发布时间】:2010-07-03 07:36:22
【问题描述】:

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

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

【问题讨论】:

    标签: android android-context


    【解决方案1】:

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

    【讨论】:

    • AndroidTestCase 现已弃用。
    • 怎么用?
    【解决方案2】:

    从 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));
        }
    }
    

    【讨论】:

    【解决方案3】:

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

    Context appContext = InstrumentationRegistry.getTargetContext();
    

    依赖是:

    androidTestCompile 'com.android.support.test:runner:0.5'
    

    【讨论】:

      【解决方案4】:

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

      InputStream is = null;
      try {
          is = getInstrumentation().getContext().getAssets().open("your.file");
      } catch (IOException e) {
          Log.d("Error", "Error during file opening!!!");
      }
      

      【讨论】:

      • 问题只是关于获取上下文而不是关于从资产文件夹中打开文件。
      【解决方案5】:

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

      【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多