Read/write 文件位于外部存储以外的位置,使用 Robolectric
Read/write file in location other than external storage using Robolectric
我的应用程序读取 /proc 中的文件。我正在尝试使用 Robolectric 2.3.
进行测试
我可以毫无问题地在 "external storage" 中创建测试文件:
ShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);
PrintWriter out;
out = new PrintWriter("myFile");
out.println(contents);
但是,如果我尝试写入 /proc
中的文件,它会爆炸 java.io.FileNotFoundException: \proc\net\netstat (Access is denied)
。
ShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);
boolean a = new File( "/proc" ).mkdirs(); //Fails
PrintWriter out;
out = new PrintWriter("/proc/myFile");
out.println(contents);
有什么方法可以使(特定的)文件存在于 /proc 中以进行测试?
我今天已经回答过类似的问题了。看起来今天是关于促进单一 class 责任和依赖注入的日子。
我会先将您的代码更改为下一个:
- 写一个class,负责打开(关闭,其他操作,注意应该很简单)文件连接
- 创建一个 class 将信息从 stream/file 读取到某个内部数据结构
- 在您的原始 class
中处理此数据
接下来我会写测试:
- 检查文件操作class
- 检查 reader 是否将正确的文件位置传递给文件操作 class 实例(模拟测试)
- 检查原始 class 是否正确处理 reader class 提供的信息(reader 在测试中被模拟)
希望对您有所帮助!
我的应用程序读取 /proc 中的文件。我正在尝试使用 Robolectric 2.3.
进行测试我可以毫无问题地在 "external storage" 中创建测试文件:
ShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);
PrintWriter out;
out = new PrintWriter("myFile");
out.println(contents);
但是,如果我尝试写入 /proc
中的文件,它会爆炸 java.io.FileNotFoundException: \proc\net\netstat (Access is denied)
。
ShadowEnvironment.setExternalStorageState(Environment.MEDIA_MOUNTED);
boolean a = new File( "/proc" ).mkdirs(); //Fails
PrintWriter out;
out = new PrintWriter("/proc/myFile");
out.println(contents);
有什么方法可以使(特定的)文件存在于 /proc 中以进行测试?
我今天已经回答过类似的问题了。看起来今天是关于促进单一 class 责任和依赖注入的日子。
我会先将您的代码更改为下一个:
- 写一个class,负责打开(关闭,其他操作,注意应该很简单)文件连接
- 创建一个 class 将信息从 stream/file 读取到某个内部数据结构
- 在您的原始 class 中处理此数据
接下来我会写测试:
- 检查文件操作class
- 检查 reader 是否将正确的文件位置传递给文件操作 class 实例(模拟测试)
- 检查原始 class 是否正确处理 reader class 提供的信息(reader 在测试中被模拟)
希望对您有所帮助!