如何构建java.io.File代码以支持JUnit测试?

时间:2018-06-11 02:15:48

标签: java javafx junit

我正在尝试为JavaFX应用程序设置一些初始测试,但具体来说,我想尝试测试TreeView组件,我想知道如何最好地隔离对文件系统的访问,以便它可以测试(没有依赖我自己的文件系统)。这是我正在尝试测试的项目:https://github.com/mfearby/magnificat(这是一个非常基本的事情,它只是显示一个TabPane,其中一些TreeViews指向文件系统)。

当您更改所选选项卡时,它会写入INI文件,以便在加载应用程序时,它可以还原这些选项卡。所以我希望能够测试这是否有效,但这取决于我自己的文件系统结构。我做过的唯一测试是使用RedGate SQL Test,所以我从未测试过GUI应用程序,所以请原谅新手问题。

我是否应该以某种方式改变使用java.io.File.listFiles()的FileTreeItem类,以便在测试时使用虚拟文件系统(可能使用Jimfs)?如果我这样做,我如何修改我的类,以便它在测试时使用Jimfs,但在不测试时使用java.io.File?我应该设置一个全局变量(eek!)并在我的FileTreeItem类中相应地执行操作吗?这听起来很糟糕但我只是想知道如何在不造成绝对憎恶的情况下最好地测试文件系统访问权限。

甚至修改应用程序代码以适应测试工具(除了一般的良好编码实践)是否是正确的,或者应该由测试框架来完成所有伪造以使应用程序运行以可测试的方式?

非常感谢任何有关“正确方法”的建议或指示。

感谢。

1 个答案:

答案 0 :(得分:0)

问问自己你是什么,并进行单元测试。

你实际上是在单独测试写入文件吗?为什么?您不应该测试JVM,但要相信它已经过测试。

如果不是那样,那么你在测试什么?

文件格式?即你写的东西会被阅读和理解吗?该部分可以通过使用ByteArrayOutputStreamByteArrayInputStream进行单元测试,因此重构代码,以便在单元测试时使用字节流测试写入/读取逻辑,但在运行代码时使用文件流。