clojure读取行在leiningen测试中失败
我正在测试一些音频行为,我需要用户判断事情是通过还是失败。我想让用户在leiningen测试中做出响应。但是,在读取行时发生了一些事情,阻止了这种情况的发生 这是使用“lein new foo”创建新clojure项目并编辑foo/test/foo/core_test.clj文件后的一些示例测试代码:clojure读取行在leiningen测试中失败,clojure,leiningen,Clojure,Leiningen,我正在测试一些音频行为,我需要用户判断事情是通过还是失败。我想让用户在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
(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")))))
这就是“莱恩测试”中发生的事情
只有control-C停止(读取线路)调用
我在Java1.6.0#JavaHotSpot(TM)64位服务器VM上使用Clojure1.4.0和Leiningen2.0.0-preview7
关于如何让阅读行在测试中工作,有什么想法吗
我还应该注意到(阅读行)在“leinrepl”中对我来说确实很好
> 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在这件事上获胜。阅读链接和谷歌搜索,stdin只是leiningen上的一个博客。有了足够多的跳跃,也许我能明白这一点,但对话框的建议似乎是最好的前进之路。在这里删除一些测试代码只是为了完整性,以防这对其他人有所帮助
(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)))))
我知道这并不能解决你的
阅读行问题,但也许你可以用一个简单的方法来解决这个问题。如果我是一个正在收听多个声音文件的用户,我宁愿单击“是”或“否”,也不必键入其中一个
(import 'javax.swing.JOptionPane)
(JOptionPane/showConfirmDialog nil "Did the test pass?" "User Input" JOptionPane/YES_NO_OPTION)
更新:
我想我以前见过这样的事情:
看来你应该尝试运行lein蹦床测试
,而不仅仅是lein测试
,以解决stdin
问题。谢谢,我会记住@DaoWen。这可能是一个更好的方法,但我仍然想知道读这行的情况。@Rogeralen-检查我在答案中添加的链接,看看这个解决方案是否有效。这看起来很有希望。谢谢将尝试并稍后报告。不幸的是,“莱恩蹦床测试”结果为“测试没有干净地完成”。并且没有输入请求。现在让我们更仔细地阅读链接。你赢了,@DaoWen。不值得为stdin工作而奋斗。对话框可以正常工作。重复吗?也许可以将其作为lein trampoline repl运行,并且不请求输入。(注意,lein repl已经为我工作了)
(import 'javax.swing.JOptionPane)
(JOptionPane/showConfirmDialog nil "Did the test pass?" "User Input" JOptionPane/YES_NO_OPTION)