escribo muchas pruebas unitarias. Desafortunadamente, mi código a menudo requiere parches de mono para ser probado correctamente por unidad. Uso frecuentemente la función patch
de la biblioteca simulada de Michael Foord (Ahora Disponible en Python 3.4 como unittest.mock) to monkey parche mi código.
mientras chateaba con otros usuarios de patch
, me di cuenta de que todo el mundo parece tener su propia forma favorita de usarlo. En este post voy a discutir las formas en que uso parche.,
decorador
patch se puede utilizar como método decorador:
o como decorador de clase:
uso patch como decorador cuando tengo una función que quiero parchear durante toda mi prueba. Tiendo a no usar parche como decorador de clase y voy a explicar por qué a continuación.
Ejemplo de decorador
Administrador de contexto
el parche se puede usar como administrador de contexto:
prefiero usar el parche como administrador de contexto cuando quiero parchear una función solo para una parte de una prueba. No uso parche como administrador de contexto cuando quiero una función parcheada para una prueba completa.,
Ejemplo de administrador de contexto
manualmente usando start and stop
patch también se puede usar para patch/unpatch manualmente usando start
y stop
métodos:
prefiero usar patch usando start/stop cuando necesito que una función sea parcheada para cada función en una clase de prueba.
Esta es probablemente la forma más común en que uso el parche en mis pruebas. A menudo grupo mis pruebas en clases de prueba donde cada método se centra en probar la misma función. Por lo tanto, normalmente quiero las mismas funciones/objetos parcheados para cada método de prueba.,
he señalado anteriormente que prefiero no usar decoradores de clase para resolver este problema. En su lugar, prefiero usar atributos de clase de prueba para almacenar referencias a funciones parcheadas en lugar de aceptar argumentos de parche en cada método de prueba con decoradores. Esto me parece más seco.
advertencia: uno de los principales beneficios de las formas de decorador/administrador de contexto de parche es que manejan la limpieza para usted. Siempre que llame a start
para configurar su objeto de parche, Recuerde siempre llamar a stop
para limpiarlo., De lo contrario, tendrá una función/objeto parcheado mono para el resto de su programa en ejecución.
Ejemplo de inicio y parada
resumen
El parche se puede usar:
- Como un método o decorador de clases
- Como un administrador de contexto
- usando métodos de inicio y parada
prefiero que mis pruebas sean legibles, secas y fáciles de modificar. Tiendo a usar métodos de inicio / parada por esa razón, pero también uso con frecuencia decoradores de métodos de parche y a veces uso administradores de contexto de parches., Es útil conocer los diferentes sabores de patch
porque su sabor favorito puede no ser siempre el más adecuado para el problema en cuestión.