Clojure测试:多个断言

3

我开始学习如何为我的Clojure程序编写测试。 我有一个包含多个断言(调用is)的测试。 我希望测试在第一个断言失败后立即停止运行。 以下是我的测试:

(deftest register-one-command
  (testing "Register-one-command"
    (do
      (is (= 0 (count @test/list-of-commands)))
      (test/add-to-list-of-commands ["A"])
      (is (= 1 (count @test/list-of-commands))))))

如果第一个is失败,我希望整个过程都会失败。

感谢您的编辑。我注意到代码重新格式化,使得关闭括号与匹配的开放括号位于同一行而不是下方。我是Clojure的新手,所以可能做错了,但我喜欢关闭括号在开放括号下面,因为这样可以更轻松地复制和粘贴单独的行。此外,当我编辑代码时,重要的是匹配开放和关闭括号,并且并非每个编辑器都会为我突出显示它们。 - Robert3452
看看这篇文章:https://adambard.com/blog/acceptable-error-handling-in-clojure/ 虽然它不是关于测试的,但讨论了如何实现“如果成功,那么……如果成功……”的一般性语法,这基本上就是一个错误单子。 - Harindu Dilshan
1个回答

5
最简单的方法是将不同的测试用例包含在 and 中。
(deftest register-one-command
  (testing "Register-one-command"
    (is (and
          (= 0 (count @test/list-of-commands))
          (test/add-to-list-of-commands ["A"])
          (= 1 (count @test/list-of-commands))))))

如果可能的话,我会尝试重构测试,以使这种额外的复杂性变得不必要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接