android - 如何在 Android 中的 Android 测试和单元测试之间共享 JSON 文件

标签 android unit-testing android-gradle-plugin android-espresso

我尝试了此博客评论中给出的建议 - http://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/

但是Android测试无法读取该文件;单元测试工作得很好。

build.gradle:

sourceSets {
    String sharedTestDir = 'src/sharedTestHelpers/java'
    String sharedTestAssetDir = 'src/sharedTestHelpers/assets'
    test {
        java.srcDir sharedTestDir
        assets.srcDir sharedTestAssetDir
    }
    androidTest {
        java.srcDir sharedTestDir
        assets.srcDir sharedTestAssetDir
    }
}

测试创建类:

public class TestDataCreator {
  public static String readFromFile(String fileName) throws IOException    
  {
    return FileUtils.readFileToString(new    
    File("src/sharedTestHelpers/assets/" + fileName));
  }}

项目结构:

Project structure

有什么建议吗?

最佳答案

对于仪器测试,您应该使用 Android API 从 Assets 文件夹中读取文件。

如果您要读取的文件位于测试应用程序的 assets 文件夹中(在您的示例中就是这种情况),您必须使用 Context测试应用程序。可以通过 InstrumentationRegistry.getContext() 解析测试应用程序上下文:

//为文件 src/sharedTestHelpers/assets/test.json 打开一个 InputStream InstrumentationRegistry.getContext().getAssets().open("test.json");

如果文件位于应用程序的 Assets 文件夹中,则需要使用 InstrumentationRegistry.getTargetContext():

//为文件 src/main/assets/app.json 打开一个 InputStream InstrumentationRegistry.getTargetContext().getAssets().open("app.json");

关于android - 如何在 Android 中的 Android 测试和单元测试之间共享 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843591/

相关文章:

java - 读取日志并将其保存到字符串

android - 当设置应用程序 :elevation ="0dp" then hamburgermenu not showing to toolbar

c++ - 使用 CMake/CTest 仅运行更改或失败的测试?

angular - 如何在 Angular 单元测试中使用模拟打开 MatDialog

Android:滑动列表项导致 clickOnItem

java - 为什么我在模拟 TextView 时会收到 InvalidUseOfMatchersException?

android - 如何使用 New Build System 在项目中添加 AAR 库?

android - 多项目 androidTest 依赖项

android - 添加 Room 后数据绑定(bind)似乎被破坏

android - Google Play 私有(private) channel "Restrict Distribution"不可见