在编写测试时无法删除重复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在编写测试时无法删除重复相关的知识,希望对你有一定的参考价值。
我无法删除clojure.test
测试中的重复。
假设我有相同抽象的多个实现:
(defn foo1 [] ,,,)
(defn foo2 [] ,,,)
(defn foo3 [] ,,,)
我还有一个测试,所有实现应该通过:
(defn test-impl [foo]
(is (= ,,, (foo))))
我现在可以创建一个clojure.test
测试,它可以在一个步骤中检查所有实现:
(deftest test-all-impls
(test-impl foo1)
(test-impl foo2)
(test-impl foo3))
一切都很好;在REPL中运行测试我得到:
(run-tests)
Testing user
Ran 1 tests containing 3 assertions.
0 failures, 0 errors.
=> {:test 1, :pass 3, :fail 0, :error 0, :type :summary}
我现在想要修改test-all-impls
以消除必须为每个实现明确调用test-impl
的重复。我发现修改test-all-impls
如下:
(deftest test-all-impls
(for [foo [foo1 foo2 foo3]] (test-impl foo))
嗯,现在不是一切都很好;在REPL我得到:
(run-tests)
Testing user
Ran 1 tests containing 0 assertions.
0 failures, 0 errors.
=> {:test 1, :pass 0, :fail 0, :error 0, :type :summary}
我错过了什么?
答案
要绕过for的懒惰,请改用doseq:
(deftest test-all-impls
(doseq [foo [foo1 foo2 foo3]] (test-impl foo))
另一答案
另一个答案是将结果转换为向量,这将强制for
循环运行:
(deftest test-all-impls
(vec (for [foo [foo1 foo2 foo3]] (test-impl foo))))
以上是关于在编写测试时无法删除重复的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery Python 无法删除数据集:数据集仍在使用中 [重复]
设置onclick侦听器在android中无法从一个片段移动到另一个活动[重复]