私はいくつかのオーディオの振る舞いをテストしていて、物事が成功するか失敗するかをユーザーが判断する必要があります。ライニンゲンテストでの回答をお願いしたいのですが。しかし、これを妨げる何かがread-lineに起こっています。
これは、「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 test foo.core-test
enter something
hi
there
what
is
going on?
^C
control-Cのみが(読み取り行)呼び出しを停止します。
Java 1.6.0_35 Java HotSpot(TM)64ビットサーバーVMでClojure1.4.0とLeiningen2.0.0-preview7を使用しています
テスト内でread-lineを機能させる方法についてのアイデアはありますか?
また、(read-line)は「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で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)))))