android - 使用 Robolectric 在外部存储以外的位置读取/写入文件

标签 android junit robolectric

我的应用程序读取/proc 中的文件。我正在尝试使用 Robolectric 2.3 对此进行测试。

我可以毫无问题地在“外部存储”中创建一个测试文件:

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 中以进行测试?

最佳答案

我今天已经回答过类似的问题。看起来今天是关于促进单一类责任和依赖注入(inject)的日子。

我会先将您的代码更改为下一个:

  • 写一个类,负责打开(关闭,其他操作,注意要简单)文件连接
  • 制作一个从流/文件中读取信息到某些内部数据结构的类
  • 在您的原始类中处理此数据

接下来我会写测试:

  • 检查文件操作类
  • 检查读取器是否将正确的文件位置传递给文件操作类实例(模拟测试)
  • 检查原始类是否正确处理了阅读器类提供的信息(阅读器在测试中被模拟)

希望对您有所帮助!

关于android - 使用 Robolectric 在外部存储以外的位置读取/写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32401447/

相关文章:

java - 使用 JUnit 测试 Java Applet

android - Robolectric 测试在 Android Studio 中运行但不在命令行中运行

android - 使用 Robolectric 测试 AsyncTaskLoader

android - 有什么方法可以将日志转储到 Android Studio 中,以便 Android Monitor 可以重复使用它们?

java - GridAdapter在膨胀过程中总是返回空指针异常

java - 解析 ListView 中的 ParseQueryAdapter 和多对多关系 [Parse.com]

android - 如何确定通知大图标的宽度和高度以及大 View 图像宽度

java - 使用局部变量作为参数的模拟内部方法

java - HBaseTestingUtility-更改日志记录级别

android - 我如何知道我的应用程序是否使用 Robolectric 运行?