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

时间:2016-06-15 18:53:23

标签: android unit-testing android-gradle 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
    }
}

TestCreator类:

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

项目结构:

Project structure

任何指针?

2 个答案:

答案 0 :(得分:2)

对于检测测试,您应该使用Android API从资源文件夹中读取文件。

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

解决测试应用程序上下文

// Opens an InputStream for the file src/sharedTestHelpers/assets/test.json InstrumentationRegistry.getContext().getAssets().open("test.json");

如果文件位于应用的资源文件夹中,则需要使用InstrumentationRegistry.getTargetContext()

// Opens an InputStream for the file src/main/assets/app.json InstrumentationRegistry.getTargetContext().getAssets().open("app.json");

答案 1 :(得分:0)

经过多次深入研究我的观察

  

单元测试可以访问它,因为它不能在android中运行。

因为Android测试有问题,因为

  1. AVD / Device中的Android测试
  2. 如果您查看apk(通过将 testApk.zip 并解压缩),则没有 / sharedTestHelpers / assets / 这样的文件夹只有资产文件夹
  3. 因此,要访问资产文件夹,您需要"上下文" 来访问测试中的上下文,您可以使用

    InstrumentationRegistry.getContext()