单元测试文件I / O方法

时间:2010-08-10 17:48:51

标签: ruby unit-testing file-io

我对单元测试还是比较新的。我在Ruby中编写了一个类,它接受一个文件,在该文件中搜索给定的Regex模式,替换它,然后将更改保存回文件。我希望能够为这种方法编写单元测试,但我不知道如何去做。有人能告诉我如何处理文件i / o的单元测试方法吗?

3 个答案:

答案 0 :(得分:6)

查看此How do I unit-test saving file to the disk?

基本上这个想法是一样的,FileSystem是你的类的依赖。因此,引入一个可以在单元测试中模拟的角色/接口(这样在单元测试时就没有依赖性);角色中的方法应该是您需要的所有文件系统 -

Read()  # returns file_contents as a string or string[]
Write(file_contents) # same as above

现在你可以使用mock来返回一个固定的字符串数组 - 然后你的类可以处理这个数组。在生产代码中,角色的真正实现将命中文件系统以返回行数组。

答案 1 :(得分:2)

您可以创建包含已知内容的文件,执行替换方法,然后使用所需结果验证已修改文件的内容。

我建议每次运行使用临时文件http://ruby-doc.org/core/classes/Tempfile.html,并在单元测试框架http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html

上仔细阅读

答案 2 :(得分:2)

如果要将文件对象传递给方法;尝试创建一个虚拟文件对象,使用一些i / o数据流将内容添加到文件对象并将其传递给正在测试的方法。

如果您只是使用某个数据流传递对象的内容,请创建一个虚拟数据流并将其传递给该方法。

您还可以选择使用虚拟文件并从该文件路径创建文件对象,并将其传递给正在测试的方法。