Lein test
以随机顺序运行我的函数。
我有两个修改相同数据的函数。我需要先运行第一个,然后运行第二个。我的测试中的顺序
示例:
;;===============my file=============
;;this fails if x and y are not found.
(defn create-data [x y]
(go add x y))
;;if the update function doesn't find x and y it adds them so create-data fails when it runs after update-data
(defn update-data [x y]
(go update x y))
;;======my file test=======
(deftest create-test
(testing "this should run first"
(is (= 20 create-data)))
(deftest create-test
(testing "this should run second"
(is (= 20 update-data)))
所以我认为为这两个函数创建一个测试将使它工作,但它没有。
(deftest test-create-update.
(testing "this should run second"
(is (= 20 create-data))
(is (= 20 update-data)))
我想要一些能够同时运行两个函数的东西,但是首先会运行create-data,无论结果如何(无论是通过还是失败)都将运行update-data。在我的测试中我需要两个。他们个人工作。但我需要自动化测试。
答案 0 :(得分:2)
您可以使用测试夹具来创建和拆除测试环境。这可以针对所有测试或每次单独测试完成。
请参阅use-fixtures:
; Here we register my-test-fixture to be called once, wrapping ALL tests
; in the namespace
(use-fixtures :once my-test-fixture)
如果要对多个名称空间强制执行订单,可以将它们包装在my-test-fixture
中。
答案 1 :(得分:0)
您为两种功能创建一个测试的直觉是一种很好的方法。您遇到的问题很可能与测试无关。
您发布的代码(go add x y)
建议您使用core.async。有一些问题:
(go add x y)
不执行任何功能,只返回y。您可能想要(!< (go (add x y)))
我认为真正的问题在于代码,而不是测试。或者,如果代码“有效”,那么这是因为您的测试中没有阻塞。您能否详细说明go
和add
在您的背景下的内容?