Android Studio Unit Test 中的 Assets 文件夹

我有一个具有以下结构的Gradle项目:

project/
    src/
        androidTest/
            java/
        main/
            java/
            res/
            AndroidManifest.xml
    build.gradle

现在我想添加一个使用资源(“原始”或“资产”)的单元测试。

我把我的资源放进去,并用(在一个)访问它。project/androidTest/assets/test_filegetContext().getResources().getAssets().open("test_file");AndroidTestCase

但是,这给了我一个.我该如何解决这个问题?FileNotFoundException


答案 1

看起来您正在尝试创建一个检测的单元测试,因为您希望在 androidTest 文件夹中创建它。

您可以在测试中使用以下两行之一来获取上下文:

  • Context ctx = InstrumentationRegistry.getTargetContext();这个会给你你的应用程序的上下文。例如,您可以使用它来获取src/main/assets中的资产。

  • Context ctx = InstrumentationRegistry.getContext();这个将为您提供测试应用程序的上下文。您可以使用它来获取src / androidTest /资产中的资产

如果你想了解更多关于单元测试中的资产,你可以阅读这篇文章在这个github文件中,你有一个例子。

弃用说明:如注释中所指出的,这些方法现已弃用。这是新的推荐方式:

  • 首先,不要导入旧的 InstrumentationRegistry 类,而是使用新的类
  • 而不是使用 。InstrumentationRegistry.getTargetContext();ApplicationProvider.getApplicationContext()
  • For :在大多数情况下,应使用而不是检测测试上下文。如果确实需要访问 测试上下文才能访问其资源,则建议改用。InstrumentationRegistry.getTargetContext();ApplicationProvider.getApplicationContext()PackageManager.getResourcesForApplication(String)

答案 2

我认为你使用了错误的上下文(应用程序上下文而不是检测上下文)使用:

getInstrumentation().getContext();

或者在这里看到我确切地做你想做的事情:https://github.com/ligi/gobandroid/blob/master/android/src/androidTest/java/org/ligi/gobandroidhd/base/AssetAwareInstrumentationTestCase.java


推荐