我对单元测试还是比较新的。我在Ruby中编写了一个类,它接受一个文件,在该文件中搜索给定的Regex模式,替换它,然后将更改保存回文件。我希望能够为这种方法编写单元测试,但我不知道如何去做。有人能告诉我如何处理文件i / o的单元测试方法吗?
答案 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数据流将内容添加到文件对象并将其传递给正在测试的方法。
如果您只是使用某个数据流传递对象的内容,请创建一个虚拟数据流并将其传递给该方法。
您还可以选择使用虚拟文件并从该文件路径创建文件对象,并将其传递给正在测试的方法。