2

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

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

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

4

1 回答 1

1

我不确定是否有专门的东西可以帮助你处理文件系统的东西,但是可以使用backgroundor against-background(如果你需要词法范围)来执行设置和拆卸。

总体思路类似于其他语言中的 setup/teardown,您可以执行以下操作:

(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
  ...)

在你的事实之前,这将创建parentandchild目录(不是文件 - 如果你也需要文件,你可以添加一个spit或其他东西)。然后根据你的事实:

  • 递归获取目录内容的列表parent(使用file-seq
  • reverse s it(因为我们只能删除空的东西,所以必须从目录树的底部开始)
  • 删除文件功能应用于树中的每个目录

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

注意事项:

  • 使用这种方法时要小心树中的符号链接,您可能会陷入循环。
  • 即使测试抛出异常,语法而不是使用宏也可以确保发生拆卸:after(after)
  • 您可以在单个命名空间中的事实子集之后进行设置/拆卸,方法是将它们包装起来(against-background)并做同样的事情。

参考:

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

于 2014-02-11T11:08:19.400 回答