python django unit-testing dictionary

dictionary python



¿Por qué se necesita assertDictEqual si los dicts se pueden comparar con `==`? (2)

Básicamente, permite que unittest brinde más información sobre por qué falló la prueba. Compara estas dos pruebas:

class DemoTest(unittest.TestCase): D1 = {''a'': 1, ''b'': 2, ''c'': [1, 2]} D2 = {''a'': 1, ''b'': 2, ''c'': [1]} def test_not_so_useful(self): assert self.D1 == self.D2 def test_useful(self): self.assertDictEqual(self.D1, self.D2)

Y sus salidas:

Failure Traceback (most recent call last): File "...x.py", line 86, in test_not_so_useful assert self.D1 == self.D2 AssertionError

contra

Failure Traceback (most recent call last): File "...x.py", line 80, in test_useful self.assertDictEqual(self.D1, self.D2) AssertionError: {''a'': 1, ''c'': [1, 2], ''b'': 2} != {''a'': 1, ''c'': [1], ''b'': 2} - {''a'': 1, ''b'': 2, ''c'': [1, 2]} ? --- + {''a'': 1, ''b'': 2, ''c'': [1]}

En este último, puede ver exactamente cuál fue la diferencia, no tiene que resolverlo usted mismo. Tenga en cuenta que solo puede usar assertEqual estándar en lugar de assertDictEqual , con el mismo resultado; por los documentos

... por lo general no es necesario invocar estos métodos directamente.

Para ser honesto, siempre he usado assertDictEqual , porque en algún momento cuando no lo usé obtenía información, que los dados iguales no son lo mismo.

Pero ... Sé que los dicts pueden compararse con el operador == :

>>> {''a'':1, ''b'':2, ''c'': [1,2]} == {''b'':2, ''a'':1, ''c'': [1,2]} True

¿Dónde puedo necesitar assertDictEqual ?


Supongo que esto es en el contexto de unittesting. El método assertDictEqual no solo comparará los dictados y evaluará a Verdadero o Falso, sino que también le puede dar información adicional. Tales como las diferencias exactas entre los dos dictados.

Además, en un buen IDE, las pruebas de unidad se integrarán muy bien. Simplemente puede agregar un TestCase, usar assertDictEqual y el IDE encontrará y ejecutará la prueba por usted. La salida se muestra en un formato fácil de leer. Esto puede ahorrarle un montón de código repetitivo.

Estaría muy interesado en un caso en el que dos dictados iguales no sean iguales en comparación con "==".