2016-06-15 54 views
1

分享Android的測試和單元測試之間的JSON文件,我想在此博客的評論中給出的建議 - http://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/如何在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

對於儀器測試,您應該使用Android API從assets文件夾中讀取文件。

如果要讀取的文件位於測試應用程序的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");

+0

我也跟着這裏給出的解決方案 - HTTP:// stackoverflow.com/questions/34256623/how-to-share-resources-between-unit-test-and-instrumentation-test-in-android/37847307#37847307 – Nazneen

0

後很多挖成這是我的觀察

單元測試可以訪問它,因爲它不會在android中運行。

對於Android的測試是問題,因爲

  1. Android的測試中AVD /設備
  2. 如果你看看你的APK(通過使作爲testApk.zip並提取它)有沒有文件夾像/sharedTestHelpers/assets/只有資產文件夾
  3. 所以對於訪問資源文件夾,你需要「上下文」在測試接入功能方面可以使用

    InstrumentationRegistry.getContext()

+1

謝謝。你是對的。所以我確實按照上面鏈接中提到的解決方案,它運行良好。 – Nazneen