模拟file.bufferedReader()给出NullPointerException

时间:2018-08-26 19:23:10

标签: kotlin mockito tdd bufferedreader

为什么file.bufferedReader()在这里给我NullPointerException

val file = mock<File>()
when(file.bufferedReader()).thenThrow(IOException::class.java)

1 个答案:

答案 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中。相依性   注射不是用于这种事情。

     

相反,最好在本地文件系统中使用真实文件,   测试后可以删除的测试目录,和/或使用固定目录   仅在读取时使用资源文件。本地文件快速可靠   并导致更有用的测试。某些开发人员会说“   测试不是接触文件系统的单元测试”,但这就是   只是教条式的建议。