16

現在、コーディング セッションの開始時に REPL で次の関数を定義しています。

(defn rt []
  (let [tns 'my.namespace-test]
    (use tns :reload-all)
    (cojure.test/test-ns tns)))

変更を加えるたびに、テストを再実行します。

user=>(rt)

それは私にとって適度にうまく機能しています。テストを削除すると、REPL を再起動してメソッドを再定義する必要があり、これは少し面倒です。useまた、このような機能を使用することについての悪いうわさを聞いたことがあります。だから私の質問は:

  • この方法を使用useすると、後で問題が発生しますか?
  • 現在行っているワークフローよりも慣用的なワークフローはありますか?
4

3 に答える 3

12

また、REPL でテストを実行します。テストをより細かく制御でき、JVM がすでに実行されているため高速であるため、これを行うのが好きです。ただ、おっしゃる通り、トラブルに巻き込まれやすいです。物事を整理するために、tools.namespaceを確認することをお勧めします。

特に、clojure.tools.namespace.repl/refreshライブ REPL で変更されたファイルをリロードするために使用できます。refresh-allクラスパス上のすべてのファイルをリロードすることもあります。

私の:devプロファイルにtools.namespace を追加し~/.lein/profiles.cljて、すべてのプロジェクトに使用できるようにします。を実行するlein replと、クラスパスに含まれますが、プロジェクトの適切な依存関係に漏れることはありません。

テストに取り組んでいるときに私が行うもう 1 つのことは、それを REPL に要求し、手動で実行することです。テストは引数のない関数なので、そのように呼び出すことができます。

于 2013-07-27T04:14:59.953 に答える
7

私はこれまでのところ、 lein-midjeに感銘を受けています

$ lein midje :autotest

src ファイルとテスト ファイルを監視する clojure プロセスを開始し、関連する名前空間をリロードし、変更されたファイルに関連するテストを実行します (依存関係の追跡)。VimShell で使用して、vim で分割バッファーを開き、ソース ファイルとテスト ファイルの両方も開きます。どちらかに変更を書き込むと、(関連する) テストが分割ペインで実行されます。

于 2014-01-09T09:46:18.163 に答える