Rya*_*sio 5 unit-testing clojure
我希望用来with-redefs模拟STDIN的用户输入.
首先,我正在测试不正确的输入,它应该重新询问用户输入.然后,应该给出正确的输入.
有没有办法用于with-redefs将不同的值绑定到给定的符号?
我正在尝试获得此功能:
(with-redefs [read-line (fn [] "HI")
read-line (fn [] "OK")]
(do (println (read-line)) ;; -> "HI"
(println (read-line)))) ;; -> "OK"
Run Code Online (Sandbox Code Playgroud)
不是特别的,但是你总是可以用某种状态'让兰比达'!
(let [a (atom ["a" "b"])]
(defn f []
(let [r (first @a)]
(swap! a rest)
r)))
(f) ;; "a"
(f) ;; "b"
(f) ;; nil
Run Code Online (Sandbox Code Playgroud)
在你的特定情况下,有一个生成'有状态'函数的函数是有意义的,所以一个完整的例子是:
(defn maker [l]
(let [a (atom l)]
(fn []
(let [r (first @a)]
(swap! a rest)
r))))
(with-redefs [read-line (maker ["HI" "OK"])]
(do (println (read-line)) ;; -> "HI"
(println (read-line)))) ;; -> "OK"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |