如何在 Android 中的 Android 测试和单元测试之间共享 JSON 文件
How to share JSON files between Android Test and Unit Tests in Android
我尝试了此博客评论中给出的建议 - 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
}
}
测试创建者class:
public class TestDataCreator {
public static String readFromFile(String fileName) throws IOException
{
return FileUtils.readFileToString(new
File("src/sharedTestHelpers/assets/" + fileName));
}}
项目结构:
有什么指点吗?
对于仪器测试,您应该使用 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");
在深入研究之后我的观察
Unit test can access this because it does not run in android .
对于Android测试是有问题的因为
- Android 在 AVD/Device
中测试
- 如果您查看您的 apk(通过将其制作为 testApk.zip 并解压),没有像 /sharedTestHelpers/assets/ 这样的文件夹 只有 asset 文件夹
所以为了访问资产文件夹你需要"Context"为了在测试中访问上下文你可以使用
InstrumentationRegistry.getContext()
我尝试了此博客评论中给出的建议 - 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
}
}
测试创建者class:
public class TestDataCreator {
public static String readFromFile(String fileName) throws IOException
{
return FileUtils.readFileToString(new
File("src/sharedTestHelpers/assets/" + fileName));
}}
项目结构:
有什么指点吗?
对于仪器测试,您应该使用 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");
在深入研究之后我的观察
Unit test can access this because it does not run in android .
对于Android测试是有问题的因为
- Android 在 AVD/Device 中测试
- 如果您查看您的 apk(通过将其制作为 testApk.zip 并解压),没有像 /sharedTestHelpers/assets/ 这样的文件夹 只有 asset 文件夹
所以为了访问资产文件夹你需要"Context"为了在测试中访问上下文你可以使用
InstrumentationRegistry.getContext()