Tengo entendido que MagicMock es un superconjunto de Mock que automáticamente hace "métodos mágicos", proporcionando así soporte para listas, iteraciones y demás ... Entonces, ¿cuál es la razón de la existencia de Mock ? ¿No es solo una versión simplificada de MagicMock que puede ignorarse prácticamente? ¿ La clase Mock conoce algún truco que no está disponible en MagicMock ?
Con Mock que puede burlarse de los métodos mágicos, pero hay que definirlos. MagicMock tiene "implementaciones predeterminadas de la mayoría de los métodos mágicos". .
Si no necesita probar ningún método mágico, Mock es adecuado y no trae muchas cosas extrañas a sus pruebas. Si necesita probar muchos métodos mágicos, MagicMock le ahorrará algo de tiempo.
fuente
Para empezar,
MagicMock
es una subclase deMock
.Como resultado, MagicMock proporciona todo lo que proporciona Mock y más. En lugar de pensar en Mock como una versión simplificada de MagicMock, piense en MagicMock como una versión extendida de Mock. Esto debería responder a sus preguntas sobre por qué existe Mock y qué proporciona Mock además de MagicMock.
En segundo lugar, MagicMock proporciona implementaciones predeterminadas de muchos / la mayoría de los métodos mágicos, mientras que Mock no. Consulte aquí para obtener más información sobre los métodos mágicos proporcionados.
Algunos ejemplos de métodos mágicos proporcionados:
Y estos que pueden no ser tan intuitivos (al menos no intuitivos para mí):
Puede "ver" los métodos agregados a MagicMock a medida que se invocan por primera vez:
Entonces, ¿por qué no usar MagicMock todo el tiempo?
La pregunta para usted es: ¿Está de acuerdo con las implementaciones del método mágico por defecto? Por ejemplo, ¿está bien no cometer
mocked_object[1]
errores? ¿Estás de acuerdo con las consecuencias imprevistas debido a que las implementaciones del método mágico ya están allí?Si la respuesta a estas preguntas es sí, entonces siga adelante y use MagicMock. De lo contrario, quédate con Mock.
fuente
Esto es lo que dice la documentación oficial de Python :
fuente
He encontrado otro caso particular en el que simple
Mock
puede ser más útil queMagicMock
:Comparar contra
ANY
puede ser útil, por ejemplo, comparar casi todas las claves entre dos diccionarios en los que se calcula algún valor utilizando un simulacro.Esto será válido si está utilizando
Mock
:mientras aumentará un
AssertionError
si has usadoMagicMock
fuente