Ruby的假文件系统
我需要一些代码将实际的文件系统伪造成假的。 因此,当我启动它时,它将/home/user/Documents/fake_fs
为/
,因此每个Dir
或File
调用都会转到该目录。 一个例子:
我想在/some_file
上创建一个文件,所以我使用:
File.open('/some_file', 'w') do |f| f.puts 'something on this file' end
它会将它写在/home/user/Documents/fake_fs/some_file
而不是/some_file
。 有没有办法做到这一点? 谢谢!
你有两个选择:
选项1 – 使用Gem伪造它
假冒某些文件系统操作不起作用, FakeFS将完全按照您的意愿执行操作。 FakeFS在Ruby标准库中重写了各种文件操作调用,因此可能会遗漏某些内容,或者某些内容可能无法正常工作。
选项2 – 重新编写代码以使其更易于测试
您基本上是硬编码/
作为应用程序开始查找文件的根源。 如果您将此配置为可配置,则您的代码可以对此进行操作以进行测试。
例如:
$root = ENV['ROOT_DIR'] || '/' File.open(File.join($root,'some_file'),'w') do |file| # whatever end
然后,您的测试可以将ROOT_DIR
设置为您想要设置的位置。
chroot
也可能有助于这样做,例如
Dir.chroot(ENV['ROOT_DIR'] || '/') File.open('/some_file','w') do |file| # whatever end
有关更多内容,请参阅man chroot
。
就个人而言,我选择2。