clojure读取行在leiningen测试中失败

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

我正在测试一些音频行为,我需要用户判断事情是通过还是失败。我想让用户在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")))))
这就是“莱恩测试”中发生的事情

只有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)