Como parte de algunas pruebas de Python que usan el marco unittest
, necesito comparar dos archivos de texto relativamente cortos, donde uno es un archivo de salida de prueba y el otro es un archivo de referencia.
El enfoque inmediato es:
import filecmp ... self.assertTrue(filecmp.cmp(tst_path, ref_path, shallow=False))
Funciona bien si pasa la prueba, pero en caso de falla, no hay mucha ayuda en la salida:
AssertionError: Falso no es cierto
¿Hay una mejor manera de comparar dos archivos como parte del marco de unittest
, de modo que se genere algún resultado útil en caso de discrepancia?
Para obtener un informe de qué línea tiene una diferencia y una copia impresa de esa línea, use assertListEqual
en el contenido, por ejemplo
import io self.assertListEqual( list(io.open(tst_path)), list(io.open(ref_path)))
La comparación de los archivos en forma de matrices conlleva errores de afirmación significativos:
assert [row for row in open(actual_path)] == [row for row in open(expected_path)]
Puede usar eso cada vez que necesite comparar archivos, o ponerlo en una función. También puede colocar los archivos en forma de cadenas de texto en lugar de matrices.