2013-09-28 154 views
1

用Midje进行单元测试是一个很棒的体验,但现在我需要测试一些与filessytem交互的代码。具体来说,代码从本地目录布局构建数据结构表示。测试文件系统代码

想到的是在/ tmp中创建目录和文件,然后在测试之后必须清理它们。我可能可以使它工作,但如果有一个正确的方法来做它会好得多。

在Clojure或更普遍的情况下,测试文件系统代码的首选方法是什么?

回答

1

我不确定是否有特定的东西可以帮助您使用文件系统的东西,但安装和拆卸可以使用backgroundagainst-background(如果您需要词法范围界定)来执行。

的总体思路是类似于其他语言的安装/拆卸,你会做这样的事情:

(require '[clojure.java.io :as io]) 

(background (before :facts (io/make-parents "parent/child/file") 
      :after :facts (map io/delete-file (reverse (file-seq (io/file "parent"))) 

(facts "About something or other 
    ...) 

你的事实之前,这将创建parentchild目录(而不是文件 - 你如果你还需要文件,可以添加spit或其他内容)。然后你的事实后:

  • 递归得到的parent目录的内容列表(使用file-seq
  • reverse的IT(因为我们只能删除空的东西,所以必须在的底部开始目录树)
  • 应用delete-file功能,每个目录树中的

的代码有创建和删除文件可能不是最好的(我是新来的!),但设置方法和拆除Midje测试中的东西是合理的。

注意事项:

  • 使用这种方法时一定要小心,在你的树的符号链接,你可以陷入一个循环。
  • 使用:after语法而不是使用(after)宏可以确保即使测试引发异常也会发生拆卸。
  • 您可以在单个命名空间中的事实子集之后执行setup/teardown,方法是将它们与(against-background)一起包装,然后执行相同的操作。

参考文献:

https://github.com/marick/Midje/wiki/Setup,-Teardown,-and-State https://github.com/marick/Midje/wiki/Background-prerequisites