erlang eunit

erlang - Mostrar información esperada y de valor completo cuando?_assertEqual falla



eunit (3)

La forma en que generalmente lo logro es tener archivos XML de salida Eunit (en formato "Surefire", formato AKA "Junit"). Los archivos XML tienen límites mucho más altos para la profundidad de impresión de términos y, por lo tanto, probablemente contengan la información que necesita.

Agregue esto a su rebar.config :

{eunit_opts, [verbose, %% eunit truncates output from tests - capture full output in %% XML files in .eunit {report,{eunit_surefire,[{dir,"."}]}}]}.

Luego puede encontrar los resultados para el módulo foo en .eunit/TEST-foo.xml . Encuentro los archivos bastante legibles en un editor de texto.

Estoy codificando una prueba unitaria donde se genera un binario (bastante largo), y quiero afirmar que el binario generado es igual al que espero que se genere. Estoy ejecutando eunit a través de " eunit de barras de refuerzo ".

La cosa es que, cuando esta afirmación falla, la salida se abrevia con " ... ", y quiero ver la salida completa para poder detectar dónde está la diferencia.

Ahora estoy usando " ? DebugFmt () " como una solución temporal, pero me gustaría saber si hay una alternativa (una opción de configuración o argumento en algún lugar que se pueda aplicar a " ? _assertEqual () " para que la salida solo se muestra cuando la afirmación falla).

¡Gracias por adelantado!

EDITAR: debido a la respuesta de legoscia, incluyo una muestra de prueba usando un generador de prueba, con múltiples aseveraciones:

can_do_something(SetupData) -> % ... some code ... [?_assertEqual(Expected1, Actual1), ?_assertEqual(Expected2, Actual2)].


Lo mejor que puedo pensar para mostrar realmente el valor en la consola es algo como esto:

Actual =:= Expected orelse ?assert(?debugFmt("~p is not ~p", [Actual, Expected]))

?debugFmt devuelve ok , que no es verdadero, por lo que la aserción siempre fallará.

Alternativamente, para usarlo como un generador de prueba, ¿todo se puede poner adentro ?_assert :

?_assert(Actual =:= Expected orelse ?debugFmt("~p is not ~p", [Actual, Expected]))


1). Abra sus fuentes eunit. En mi sistema:

cd /usr/lib/erlang/lib/eunit-2.3.2/src

2). Edite eunit_lib.erl de tal manera:

diff 54c54 < format_exception(Exception, 20). --- > format_exception(Exception, 99999).

3). sudo erlc -I ../include eunit_lib.erl

4). mv eunit_lib.beam ../ebin

5). Tenga un buen día))