7

私はこのテストを持っています:

(ns opengltuts.core-test
  (:use clojure.test
        opengltuts.util)
  (:import (org.lwjgl.opengl
             GL11 GL12 GL13 GL14 GL15 GL20 GL21 GL30 GL31 GL32 GL33)))

(def gl-classes [GL11 GL12 GL13 GL14 GL15 GL20 GL21 GL30 GL31 GL32 GL33])

(deftest find-method-test
  (testing "find-method finds method in single class"
    (is (= (find-method "toString" Object)
           ["public java.lang.String java.lang.Object.toString()"])))
  (testing "find-method finds all methods in list of classes"
    (is (= (apply find-method "glShaderSource" gl-classes)
           (comment "Omitted a 'p' to trigger failure")
           ["ublic static void org.lwjgl.opengl.GL20.glShaderSource(int,java.nio.ByteBuffer)"
            "public static void org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence)"
            "public static void org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence[])"]))))

これが失敗することを確認したので、次のような出力が得られます

lein test opengltuts.core-test

FAIL in (find-method-test) (core_test.clj:14)
find-method finds all methods in list of classes
expected: (= (apply find-method "glShaderSource" gl-classes) ["ublic static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.nio.ByteBuffer)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence[])"])
      actual: (not (= ("public static void org.lwjgl.opengl.GL20.glShaderSource(int,java.nio.ByteBuffer)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence[])") ["ublic static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.nio.ByteBuffer)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence)" "public static void 
org.lwjgl.opengl.GL20.glShaderSource(int,java.lang.CharSequence[])"]))

Ran 1 tests containing 2 assertions.
1 failures, 0 errors.
Tests failed.

これはかなり読みにくいと思います。それよりも、次のような出力を好みます。

<all that info stuff, like the name of the test>
Expected: [something]
Got: [something-else]

そのままでは、何と何を比較しているのかを理解するだけで苦労します。

4

2 に答える 2

10

clojure.testのレポートは、関数を再バインドすることで構成できますclojure.test/report。これは、名前空間のドキュメントで説明されています。関数は一連のイベントマップで呼び出され、それぞれがテスト実行のあるフェーズを表します。ここclojure.testに、ソースでJUnit互換の出力を生成する例があります。

于 2012-10-09T01:25:58.733 に答える
4

Clojure にはいくつかの一般的なテスト フレームワークがあります。clojure.test (使用している) が一般的ですが、Midjeの出力は探しているものに近いように見えます。テストの失敗例を次に示します。

FAIL at (t_core.clj:13)
    Expected: "I am a test file fact"
      Actual: 3

https://github.com/marick/Midje/wiki/Migrating-from-clojure.test

于 2012-10-08T18:21:46.247 に答える