我无法将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中尝试这个时,它就失败了。
答案 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)))))