我正在測試一些音頻行爲,並且我需要用戶判斷事情是否通過或失敗。我想在leiningen測試中詢問用戶的回覆。但是,有些事情發生在讀線上,阻止了這一點。clojure read-line在leiningen測試中失敗
這是一些例子測試代碼爲「雷音新富」創建一個新的Clojure項目和編輯富/測試/富/ core_test.clj文件後:
(ns foo.core-test
(:use clojure.test
foo.core))
(deftest a-test
(testing "FIXME, what a fail."
(let [_ (println "enter something")
yn (read-line)]
(println yn)
(is (= yn "y")))))
,這是一個發生了什麼「lein test」
lein test foo.core-test
enter something
hi
there
what
is
going on?
^C
只有control-C停止(read-line)調用。
我使用Clojure的1.4.0和Leiningen 2.0.0 preview7於Java 1.6.0_35 Java的熱點(TM)64位服務器VM
如何讓讀線在裏面工作的任何想法一個測試?
我還應該注意到,(讀線)不正常工作裏面的「雷音REPL」我...
> lein repl
nREPL server started on port 54398
REPL-y 0.1.0-beta8
Clojure 1.4.0
Exit: Control+D or (exit) or (quit)
Commands: (user/help)
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
(user/sourcery function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
(user/clojuredocs name-here)
(user/clojuredocs "ns-here" "name-here")
user=> (println (read-line))
hi
hi
nil
user=> (read-line)
ho
"ho"
UPDATE:
我要去給@DaoWen勝利在這。閱讀鏈接& googling左右,stdin只是leiningen b0rken。有了足夠的箍跳,也許我可以弄清楚這一點,但對話框的建議似乎是最好的前進道路。爲了完整起見,在這裏丟棄一些測試代碼,以防止這可以幫助其他人。
(ns foo.core-test
(:use clojure.test
foo.core))
(import 'javax.swing.JOptionPane)
(defn ask-yn
"return 0 on pass, 1 on fail"
[prompt]
(JOptionPane/showConfirmDialog nil prompt "User Input" JOptionPane/YES_NO_OPTION))
(deftest a-test
(testing "a-test"
(let [yn (ask-yn "did a-test pass?")]
(is (= yn 0)))))
(deftest b-test
(testing "b-test"
(let [yn (ask-yn "did b-test pass?")]
(is (= yn 0)))))
重複? http://stackoverflow.com/questions/7707558/clojure-read-line-doesnt-wait-for-input – noahlz
也許運行它爲'lein trampoline repl'? – Bill
萊茵蹦牀的測試結果在「測試沒有完成乾淨。」並沒有要求輸入。 (注意,lein repl已經適用於我) –