为什么file.bufferedReader()
在这里给我NullPointerException
?
val file = mock<File>()
when(file.bufferedReader()).thenThrow(IOException::class.java)
答案 0 :(得分:0)
根据该线程Unable to mock BufferedWriter class in junit
您可以模拟Java IO类(包括它们的构造函数,所以将来 使用JMockit库也可以模拟实例),尽管您会 可能会遇到诸如NullPointerException之类的困难, Writer()构造函数(取决于模拟的完成方式以及 IO类被模拟)。
但是,请注意,Java IO API包含许多交互类 和深层继承层次。在您的示例中,FileWriter 类也可能需要模拟,否则是一个实际文件 将被创建。
此外,在应用程序代码中使用IO类通常只是 实施细节,可以轻松更改。你可以切换 从IO流到编写器,从常规IO到NIO,或使用新的 例如,Java 8实用程序。或使用第三方IO库。
最重要的是,尝试模拟IO类是一个非常糟糕的主意。 如果(按照另一个答案的建议)您更改了 客户端代码将Writers等注入到SUT中。相依性 注射不是用于这种事情。
相反,最好在本地文件系统中使用真实文件, 测试后可以删除的测试目录,和/或使用固定目录 仅在读取时使用资源文件。本地文件快速可靠 并导致更有用的测试。某些开发人员会说“ 测试不是接触文件系统的单元测试”,但这就是 只是教条式的建议。