我正在测试一些音频行为,我需要用户判断事情是否通过。我想请用户在leiningen测试中做出回应。但是,有一些事情发生在读取线上,阻止了这一点。
这是使用“lein new foo”创建新clojure项目并编辑foo / test / foo / 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测试”中发生的事情
lein test foo.core-test
enter something
hi
there
what
is
going on?
^C
只有control-C停止(读取线路)呼叫。
我在Java 1.6.0_35 Java HotSpot(TM)64位服务器虚拟机上使用Clojure 1.4.0和Leiningen 2.0.0-preview7
关于如何在测试中使用read-line的任何想法?
我还应该注意(read-line)在“lein 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"
更新:
我打算给@DaoWen赢得胜利。阅读链接&谷歌搜索,斯坦丁只是在莱宁根。有足够的箍跳,也许我可以想出来,但对话框的建议似乎是最好的前进道路。这里删除一些测试代码只是为了完整性,以防其他人。
(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)))))
答案 0 :(得分:2)
我知道这不会解决您的read-line
问题,但也许您只需使用JOptionPane
即可解决问题。如果我是一个听多个声音文件的用户,我宁可单击是或否,而不必键入其中一个。
(import 'javax.swing.JOptionPane)
(JOptionPane/showConfirmDialog nil "Did the test pass?" "User Input" JOptionPane/YES_NO_OPTION)
<强> 更新 强>
我以为我之前见过这样的事情:
您似乎应该尝试运行lein trampoline test
而不是lein test
来解决stdin
问题。