Unit testing 测试文件系统代码

Unit testing 测试文件系统代码,unit-testing,clojure,midje,Unit Testing,Clojure,Midje,使用Midje进行单元测试是一次很好的体验,但现在我需要测试一些与文件系统交互的代码。具体来说,该代码从本地目录布局构建数据结构表示 我想到的是在/tmp中创建目录和文件,然后在测试之后必须清理这些目录和文件。我可能可以让它工作,但如果有一个正确的方法,它会更好 在Clojure或更一般的情况下,测试文件系统代码的首选方法是什么?我不确定是否有什么特别的方法可以帮助您处理文件系统的内容,但是可以使用background或background(如果您需要词法范围) 总体思路类似于其他语言中的设置/

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

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


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

我不确定是否有什么特别的方法可以帮助您处理文件系统的内容,但是可以使用
background
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
  ...)
在创建事实之前,这将创建
父目录
子目录
(不是文件-如果您也需要该文件,您可以添加一个或其他内容)。然后在你陈述事实之后:

  • 递归获取父目录的内容列表(使用)
  • s it(因为我们只能删除空的内容,所以必须从目录树的底部开始)
  • 将函数应用于树中的每个目录
创建和删除文件的代码可能不是最好的(我是新手!),但是在Midje测试中设置和删除文件的方法是合理的

注意事项:

  • 使用此方法时,请小心树中的符号链接,否则会陷入循环中
  • 存在
    :after
    语法,而不是使用
    (after)
    宏,以确保即使测试引发异常也会发生拆卸
  • 您可以在单个名称空间中的事实子集之后进行设置/拆卸,方法是使用
    (在后台)
    包装它们,然后执行相同的操作
参考资料: