在编写单元测试时,我有时必须模拟一个函数来为每个函数调用返回一系列定义的值。
目前我正在做这样的事情:
(testing "fitness-proportionate selection"
; store sequence of rand values in atom, first val is ignored as we always use rest
; normalized fitness: 0: 0 1: 1/6 2: 1/3 3: 1/2
; summed fitness 0: 0 1: 1/6 2: 1/2 3: 1
(let [r (atom [0 1 1/2 1/6 0])] (with-redefs [rand (fn [] (first (swap! r rest)))]
(is (= [3 2 1 0] (fitness-proportionate-selection [0 1 2 3] identity))))))
有人可以帮我找到一种更优雅的方法吗?更易读的东西,包含更少的逻辑。这将导致单元测试本身的错误更少。我目前正在使用clojure.test
并且不希望使用其他库。