Ich teste etwas Audio-Verhalten und ich brauche den Benutzer zu beurteilen, ob Dinge passieren oder nicht. Ich möchte den Benutzer nach einer Antwort innerhalb eines Leiningen Tests fragen. Aber etwas passiert mit der Read-Line, die das verhindert.clojure read-line scheitert in leiningen test
Dies ist einige Beispiel Testcodes nach einem neuen clojure Projekt mit "lein neu foo" und Bearbeiten der foo/test/foo/core_test.clj-Datei erstellen:
(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")))))
und das ist, was in einem Fall "lein test"
lein test foo.core-test
enter something
hi
there
what
is
going on?
^C
Nur control-C stoppt den (Lesezeilen-) Aufruf.
Ich bin mit Clojure 1.4.0 und 2.0.0 Leiningen-preview7 auf Java 1.6.0_35 Java HotSpot (TM) 64-Bit Server VM
Alle Ideen, wie nach innen erhalten read-line zu arbeiten ein Test?
Ich möchte auch, dass (read-line) beachten fein innen funktioniert "lein repl" für mich ...
> 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"
UPDATE:
Ich werde @DaoWen den Sieg geben darauf. Lesen Sie die Links & googeln herum, stdin ist nur b0rken auf Leiningen. Mit genügend Hoop-Jumping könnte ich das vielleicht herausfinden, aber der Vorschlag einer Dialogbox scheint der beste Weg nach vorne zu sein. Löschen Sie hier einen Testcode, nur für die Vollständigkeit, falls dies anderen hilft. um es
(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)))))
Duplizieren? http://stackoverflow.com/questions/7707558/clojure-read-line-doesnt-wait-for-input – noahlz
Vielleicht führen Sie es als "Lein Trampolin repl"? – Bill
lein trampolintestergebnisse in "Tests wurden nicht sauber beendet." und keine Aufforderung zur Eingabe. (Anmerkung, lein repl funktioniert bereits für mich) –