如何为单元测试生成临时文件?

4

测试方法允许用户添加一个path,其中包含数据的其他文件。

例如,用户可能会在/workspace/data目录中存储名为data.txt的文件。我们想将该目录的路径添加到已存在的数组DATA_PATH中。

方法:

def add_custom_path(path)
  DATA_PATH.unshift(path)
end

path 是Rails应用中用户存储文件的位置。

该gem使用test-unit

问题:

是否有一种方法可以在某个目录中临时生成一个文件,运行一个assert_not_empty测试,然后让文件消失?

我没有为gems编写测试的经验,所以任何指导将不胜感激。

1个回答

11

Tempfile 类的 .create.new 方法都可以接收一个第二个参数,用于指定文件所在的目录。由 Tempfile 创建的文件会在临时文件的 File 对象被垃圾回收或 Ruby 退出时自动删除。因此,您可以创建一个临时文件,

tempfile = Tempfile.new('filename', 'directoryname')

写入内容后,进行测试,让 Ruby 清理掉它。

请注意,第一个参数不是文件的完整未限定名称,而是一部分,Tempfile 会添加消除歧义的字符,因此您可以在测试套件中安全地多次执行它。

另外,如果需要文件具有特定的后缀名,可以执行如下操作:

tempfile = Tempfile.new(['filename', '.rb'], 'directoryname')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接