2013-02-23 87 views
3

我很高兴能找到FakeFS能够伪造一个文件系统沙箱,其中我的测试可以混乱。现在我希望能够测试FileUtils.chown和chmod操作,并且希望能够在测试环境中使用假用户,而不是将我的东西绑定到操作系统用户数据库,以完成便携式和独立测试。如何模拟系统用户在ruby中测试文件系统交互?

我用rspec做我的测试。

什么是最好的方法来做到这一点?

回答

1

我不知道我得到的问题,但我认为你要测试的文件实用程序调用的“真实”的结果,即改变权限和文件的所有权,这就是为什么你需要某种用户。我不会那样做,因为“SELECT没有被破坏”:http://pragmatictips.com/26

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

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

+0

感谢您将我唤醒:-) – 2013-02-23 15:33:31

1

有一个非常简单的方法来做到这一点:FileUtils::DryRun。这是一个模块,就像FileUtils一样,但实际上并没有对文件系统做任何事情来处理这些情况。

如果你需要它来代替FileUtils,只需运行FileUtils = FileUtils::DryRun

+0

由于我需要测试文件系统在我的应用程序中经历的各种状态,因此FileUtils方法的一个简单干运行不会执行这个技巧,所以我使用的是FakeFS。我现在缺少的东西是能够模拟作用于文件系统的不同系统用户。 – 2013-02-23 15:16:35