5

私はいくつかのオーディオの振る舞いをテストしていて、物事が成功するか失敗するかをユーザーが判断する必要があります。ライニンゲンテストでの回答をお願いしたいのですが。しかし、これを妨げる何かが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)))))
4

1 に答える 1

2

これで問題が解決しないことはわかっていますが、代わりにread-linea を使用するだけで回避できる場合がありますJOptionPane。私が複数のサウンド ファイルを聞いているユーザーであれば、2 つのうちの 1 つを入力するよりも、 [はい]または[いいえ] をクリックするだけです。

(import 'javax.swing.JOptionPane)
(JOptionPane/showConfirmDialog nil "Did the test pass?" "User Input" JOptionPane/YES_NO_OPTION)

アップデート:

以前に次のようなものを見たことがあると思いました。

lein run を使用して ENTER を押しても read-line が戻らない (ハングしたように見える) のに、lein repl では機能するのはなぜですか?

問題を解決するためlein trampoline testだけではなく、実行してみる必要があるようです。lein teststdin

于 2012-09-08T20:35:10.403 に答える