这是测试core.async功能的可接受方式吗?
问题描述:
考虑以下单元测试片段:这是测试core.async功能的可接受方式吗?
(deftest async-test
(testing "Testing some core.async functionality."
(go (is (= (<! (go "val")) "val1")))))
运行测试收率:
Ran 1 tests containing 0 assertions. 0 failures, 0 errors.
FAIL in() (at repl:253:51) expected: (= (<! (go "val")) "val1")
actual: (not (= "val" "val1"))
但因为这是奇怪:(ⅰ)有1个断言在该试验中,还测试输出说有0,并且(ii)测试语句也说有0次失败,即使有1次失败。
我想这是因为(is...)
声明是在一个去块。所以我的问题是,这是使用core.async功能进行单元测试的最佳方式吗?这里有一些我错过的最佳做法吗?
答
此问题不是core.async的独占,而是所有多线程代码。您需要确保测试断言由启动测试的线程运行,因为线程也收集并打印所有测试的结果。
在Clojure中的情况下,你只需要使用阻塞<!!
操作:
(deftest async-test
(testing "Testing some core.async functionality."
(is (= (<!! (go "val")) "val1")))
在ClojureScript的情况下使用async
宏。 This有大量的关于测试细节在ClojureScript
(deftest async-test
(testing "Testing some core.async functionality."
(async done
(go
(is (= (<! (go "val")) "val1"))
(done)))))
我在例如使用ClojureScript(所以不能用' George
它的工作原理 - 非常感谢将我指向“异步”宏的方向! – George