如何模拟系统用户在ruby中测试文件系统交互?

时间:2013-02-23 13:46:49

标签: ruby rspec tdd

我很高兴找到FakeFS能够伪造文件系统沙箱,我的测试可能会乱七八糟。现在我希望能够测试测试FileUtils.chown和chmod操作,因此希望在测试环境中使用假用户,而不是将我的东西绑定到操作系统用户数据库以进行完全可移植和离散测试。

我使用rspec进行测试。

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

有一种非常简单的方法:FileUtils::DryRun。它是一个像FileUtils一样的模块,但实际上并没有对文件系统做任何事情。

如果您需要它来替换{​​{1}},请运行FileUtils

答案 1 :(得分:1)

我不确定我是否得到了这个问题,但我认为你想测试FileUtils调用的“真实”结果,即更改文件的权限和所有权,这就是你需要某种用户的原因。我不这样做,因为“SELECT没有被破坏”:http://pragmatictips.com/26

相反,假设如下:如果您使用正确的参数调用FileUtils.chown和朋友,他们将做正确的事情。要确保您的应用程序将正确的参数传递给FileUtils,请使用模拟。这是一个例子:https://gist.github.com/phillipoertel/5020102

如果你不想将你的测试与实现紧密结合(模拟器知道你的类内部发生了什么),你可以通过期望它的效果来测试更改的权限。例如:如果之前不允许@user访问@file,请调用更改权限的方法,然后调用需要更改权限的方法之一并声明其有效。但是这种方法将访问您首先不想要的文件系统。