结合test.check和clojure测试

时间:2014-06-14 22:08:05

标签: 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”,它就会按预期工作。但是,通过“lein quickie”从草书repl或quickie插件运行测试,repl将重新加载名称空间不正确。

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

如果有人知道如何解决这个问题,我会很高兴听到它。我还想听听有人是否有一个不同的设置,它结合了正常的测试和test.check,或者根本不打算工作。

谢谢, 斯文

更新实际上我发现问题不是普通和test.check的组合,而是我试图检查断言的事实是针对特定情况。在正常的测试中,你会这样做(是(抛出?断言)(函数......但是当我在test.check中尝试这个时,它就失败了。

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的更新,则您的测试期望抛出异常。如果没有发生异常,那么测试应该失败。

如果是这样,那么你需要在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)))))