,你可以嘲笑的Java
IO类(包括它们的构造,所以未来的情况下,也得到嘲笑)与JMockit库,虽然你可能会面临困境,如
NullPointerException从
Writer()构造函数(取决于嘲讽是怎么做的,以及IO类被嘲笑)。
但是,请注意,Java IO API包含许多交互类和深层继承层次结构。在您的示例中,
FileWriter可能还需要模拟该类,否则将创建一个实际文件。
同样,在应用程序代码中使用IO类通常只是实现细节,可以轻松更改。例如,您可以从IO流切换到编写器,从常规IO切换到NIO,或者使用新的Java
8实用程序。或使用第三方IO库。
最重要的是,尝试模拟IO类是一个非常糟糕的主意。如果(如另一个答案中所建议)更改客户端代码以将
Writers等 注入
到SUT中,则情况更糟。依赖注入只是不适合这种事情。
而是在本地文件系统中使用 真实 文件,最好是从测试目录中删除 真实
文件,该目录可以在测试后删除,和/或仅在读取时使用固定资源文件。本地文件快速可靠,并导致更有用的测试。某些开发人员会说“如果测试碰到文件系统,则它不是单元测试”,但这只是教条式的建议。



