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 在测试中被模拟)

希望对您有所帮助!