unit-testing - 结合 test.check 和 Clojure 测试

标签 unit-testing clojure

我在将 test.check 与正常测试一起使用时遇到问题。我一整天都在尝试弄清楚发生了什么事,但我仍然不确定。 这就是我现在拥有的:

(deftest user-can-only-be-inserted-once
  (;normal test))

(defspec insert-one-user-should-let-me-retrieve-that-one-user
         gen-quantity
         (prop/for-all ; test.check test))

现在,只要我在测试文件中每次更改后从控制台执行“lein test”,它就会按预期工作。但是,从草书 repl 运行测试或通过“lein Quickie”使用 Quickie 插件运行测试,repl 将重新加载不正确的命名空间。

效果是,每当测试失败并且我修复该测试时,它仍然会在 repl 中失败,因此看起来有些东西在那里无法正常工作。

如果有人知道如何解决这个问题,我很乐意听到。我还想听听是否有人有不同的设置,将正常测试和 test.check 结合起来,或者这根本不起作用。

谢谢, 斯文

更新 实际上,我发现问题不是 normal 和 test.check 的组合,而是我试图检查断言是否在特定情况下抛出的事实。在正常测试中,您可以使用 (is (thrown? Assertion (function...) 来执行此操作,但是当我在 test.check 中尝试此操作时,它会失败。

最佳答案

如果我正确理解您的更新,您的测试预计会引发异常。如果没有发生异常,则测试应该失败。

如果是这样,那么您需要在 defspec 中编写属性来捕获异常,将其作为值返回,并验证异常是否发生。

你可以这样做:

(defn catcher [f]
  (try (f)
   (catch Throwable t t)))

(defspec some-specification-name
  (prop/for-all [...generator-bindings...]
    (not-nil? (catcher (my-function generated-values)))))

关于unit-testing - 结合 test.check 和 Clojure 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24224755/

相关文章:

c# - 如何测试asp.net core内置的Ilogger

java - 如何在实现 void 方法之前对其进行测试?

html - Compojure HTML 格式化

emacs - nrepl 每 1024 个字符插入 <newline>

xml - Clojure XML 解析

javascript - 用于 promise 的 Angular Jasmine 单元测试

unit-testing - 那里有哪些 'styles' 测试框架?

unit-testing - 数据驱动单元测试

clojure - 从 Leiningen project.clj 文件中读取项目名称和版本

java - 可以修改示例以返回值吗?