Articles of burlándose de

Mejor manera de simular atributos de clase en la prueba unitaria de python

Tengo una clase base que define un atributo de clase y algunas clases secundarias que dependen de él, por ejemplo, class Base(object): assignment = dict(a=1, b=2, c=3) Quiero hacer una prueba de unidad de esta clase con diferentes asignaciones , por ejemplo, diccionario vacío, solo elemento, etc. Esto es extremadamente simplificado, por supuesto, no es […]

¿Atributos simulados en simulacro de Python?

Me está costando bastante el uso de mock en Python: def method_under_test(): r = requests.post(“http://localhost/post”) print r.ok # prints “” if r.ok: return StartResult() else: raise Exception() class MethodUnderTestTest(TestCase): def test_method_under_test(self): with patch(‘requests.post’) as patched_post: patched_post.return_value.ok = True result = method_under_test() self.assertEqual(type(result), StartResult, “Failed to return a StartResult.”) La prueba realmente devuelve el valor correcto, […]

Parche __call__ de una función

Necesito parchear fecha y hora actual en las pruebas. Estoy usando esta solución: def _utcnow(): return datetime.datetime.utcnow() def utcnow(): “””A proxy which can be patched in tests. “”” # another level of indirection, because some modules import utcnow return _utcnow() Luego en mis pruebas hago algo como: with mock.patch(‘***.utils._utcnow’, return_value=***): … Pero hoy se me […]

¿Cómo monkeypatch datetime.datetime.now con py.test?

Necesito probar funciones que usan datetime.datetime.now() . ¿Cuál es la forma más fácil de hacer esto?

Simulacro de una función para elevar una excepción para probar un bloque de excepción

Tengo una función ( foo ) que llama a otra función ( bar ). Si la invocación de la bar() genera un HttpError , quiero manejarlo especialmente si el código de estado es 404, de lo contrario volverá a subir. Estoy tratando de escribir algunas pruebas unitarias en torno a esta función foo , burlándose […]

Prueba simulada de Python: ¿Es posible simular el valor de los argumentos predeterminados de un método en el momento de la prueba?

Tengo un método que acepta argumentos por defecto: def build_url(endpoint, host=settings.DEFAULT_HOST): return ‘{}{}’.format(host, endpoint) Tengo un caso de prueba que ejerce este método: class BuildUrlTestCase(TestCase): def test_build_url(self): “”” If host and endpoint are supplied result should be ‘host/endpoint’ “”” result = build_url(‘/end’, ‘host’) expected = ‘host/end’ self.assertEqual(result,expected) @patch(‘myapp.settings’) def test_build_url_with_default(self, mock_settings): “”” If only endpoint […]

Python simula múltiples valores de retorno

Estoy usando pythons mock.patch y me gustaría cambiar el valor de retorno para cada llamada. Aquí está la advertencia: la función que se está parchando no tiene entradas, por lo que no puedo cambiar el valor de retorno según la entrada. Aquí está mi código de referencia. def get_boolean_response(): response = io.prompt(‘y/n’).lower() while response not […]

Objeto simulado de Python con método llamado varias veces

Tengo una clase que estoy probando, la cual tiene como dependencia a otra clase (una instancia de la cual se pasa al método init de CUT). Quiero burlarme de esta clase usando la biblioteca de Python Mock. Lo que tengo es algo como: mockobj = Mock(spec=MyDependencyClass) mockobj.methodfromdepclass.return_value = “the value I want the mock to […]

parcheando una clase produce “AttributeError: el objeto simulado no tiene ningún atributo” al acceder a los atributos de instancia

El problema El uso de mock.patch con autospec=True para parchear una clase no preserva los atributos de las instancias de esa clase. Los detalles Estoy tratando de probar una Bar clase que crea una instancia de la clase Foo como un atributo de objeto de Bar llamado foo . El método de Bar bajo prueba […]

Cómo burlarse de una importación

El módulo A incluye la import B en su parte superior. Sin embargo, en condiciones de prueba me gustaría simular B en A (simular AB ) y abstenerme completamente de importar B De hecho, B no se instala en el entorno de prueba a propósito. A es la unidad bajo prueba. Tengo que importar A […]