2012-10-08 12 views
7

tengo esta prueba:¿Es posible modificar la salida de clojure.test?

(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[])"])))) 

Ahora se aseguró de esta falla, puedo obtener una salida como

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. 

eso me parece bastante ilegible. En lugar de eso, yo preferiría una salida como:

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

Como es, que tienen problemas simplemente averiguar qué estaba comparando con qué.

Respuesta

4

Existen varios marcos de prueba populares para Clojure, clojure.test (que está utilizando) es popular, aunque Midje parece que su salida es más cercana a lo que está buscando. He aquí un ejemplo de prueba falla:

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

+0

No estoy seguro de si debería aceptar esto como la mejor respuesta. Me gusta Midje, pero al mismo tiempo realmente no respondiste la pregunta de si la salida de clojure.test es o no configurable ... – Cubic

+0

No puedo encontrar ninguna indicación de que sea configurable, así que sospecho que no es (a menos que vuelva a vincular su función de impresión o lo bifurque) –

+0

Uh lo que sea, mi problema se resuelve de cualquier manera. – Cubic

9

clojure.test 's informes es configurable por volver a vincular la función clojure.test/report. Esto se describe en el docs for the namespace. Su función será llamada con una sucesión de mapas de eventos, cada uno representando una fase de la prueba. Hay un ejemplo de generación de salida compatible con JUnit en la fuente clojure.testhere.

Cuestiones relacionadas