Articles of burlándose

burlándose de una conexión de socket en Python

Estoy tratando de escribir pruebas unitarias para una clase en python. La clase abre un socket TCP en init . Estoy intentando burlarme de esto para poder afirmar que la conexión se realiza con los valores correctos, pero obviamente no sucede en las pruebas unitarias. Me he cansado de MagicMock, parche, etc. pero no he […]

¿Cómo mover el mock.patch a la configuración?

Tengo las siguientes dos pruebas unitarias: @mock.patch(‘news.resources.generator.Generator.get_header’) @mock.patch(‘news.scraper.bbc_spider.BBCSpider.save_scraped_rss_into_news_model’) @mock.patch(‘news.scraper.bbc_spider.BBCSpider.get_news_urls’) @mock.patch(‘requests.get’) def test_get_header_is_called(self, req_get, spi_news, spi_save_rss, get_head): spi_news.return_value = {‘x’: 1} gen = Generator() gen.get() get_head.assert_called_with() @mock.patch(‘news.resources.generator.Generator.get_header’) @mock.patch(‘news.scraper.bbc_spider.BBCSpider.save_scraped_rss_into_news_model’) @mock.patch(‘news.scraper.bbc_spider.BBCSpider.get_news_urls’) @mock.patch(‘requests.get’) def test_task_url_is_save_scraped_rss_into_news_model(self, req_get, spi_news, spi_save_rss, get_head): spi_news.return_value = {‘x’: 1} gen = Generator() gen.get() tasks = self.taskqueue_stub.GetTasks(“newstasks”) self.assertEqual(tasks[0][‘url’], ‘/v1/worker/save-scraped-rss-into-news-model’) Como puedes ver hay mucha repetición de […]

Python: ¿Cómo me burlo de datetime.utcnow ()?

Tengo el siguiente: from datetime import datetime def get_report_month_key(): month_for_report = datetime.utcnow() return month_for_report.strftime(“%Y%m”) ¿Cómo me burlo de datetime.utcnow () para poder escribir la prueba unitaria en esta función? Intenté leer esto pero no puedo hacer que funcione para mí en utcnow ()

Burlándose de las llamadas de la super clase en Python

Estoy haciendo algunas pruebas de unidad y en algún momento necesito burlarme de una super llamada para lanzar un error, por ejemplo: @classmethod def myfunc(cls, *args, **kwargs) try: super(MyClass, cls).my_function(args, kwargs) except MyException as e: #… Estoy utilizando la biblioteca de mockers para burlar mis objetos en general, pero no he encontrado una manera de […]

Cómo usar Python Mock para generar una excepción, pero con Errno establecido en un valor determinado

Dado este código de Python: elif request.method == ‘DELETE’: try: os.remove(full_file) return jsonify({‘results’:’purged %s’ % full_file}) except OSError as e: if e.errno != errno.ENOENT: raise return jsonify({‘results’:’file not present: %s’ % full_file}) Quiero probar todas las rutas posibles, incluido el manejo de excepciones. Usando Mock, es bastante fácil lanzar una excepción, lo que hago con […]

Burlándose de urllib2.urlopen (). Read () para respuestas diferentes

Estoy tratando de burlarme de la biblioteca urllib2.urlopen de una manera que debería obtener respuestas diferentes para las diferentes URL que paso a la función. La forma en que lo estoy haciendo en mi archivo de prueba ahora es así @patch(othermodule.urllib2.urlopen) def mytest(self, mock_of_urllib2_urllopen): a = Mock() a.read.side_effect = [“response1”, “response2”] mock_of_urllib2_urlopen.return_value = a othermodule.function_to_be_tested() […]

Burlándose de una llamada de subproceso en Python

Tengo un método ( run_script ) que me gustaría probar. Específicamente quiero probar que ocurre una llamada a subprocess.Popen . Sería incluso mejor probar que subprocess.Popen se llama con ciertos parámetros. Cuando ejecuto la prueba, sin embargo, obtengo TypeError: ‘tuple’ object is not callable . ¿Cómo puedo probar mi método para asegurarme de que en […]

Cómo burlarse de un método SendGrid en Python

Estoy tratando de burlarme del método SendGrid dentro de mi función de vista de Flask, para que no envíe un correo electrónico durante la prueba. Cuando ejecuto el siguiente código, aparece un error ‘ImportError: No hay módulo llamado sg’. ¿Cómo puedo configurar correctamente el método ‘sg’ para que se encuentre en las pruebas? # test_helpers.py […]

UnitTest Python simula solo una función llamada múltiple

Estoy usando Mock ( http://www.voidspace.org.uk/python/mock/mock.html ), y encontré un caso falso en particular que no puedo encontrar la solución. Tengo una función con varias llamadas a some_function que se está burlando. def function(): some_function(1) some_function(2) some_function(3) Solo quiero burlarme de la primera y tercera llamada a some_function. La segunda llamada que quiero que se haga […]

isinstance y burla

class HelloWorld(object): def say_it(self): return ‘Hello I am Hello World’ def i_call_hello_world(hw_obj): print ‘here… check type: %s’ %type(HelloWorld) if isinstance(hw_obj, HelloWorld): print hw_obj.say_it() from mock import patch, MagicMock import unittest class TestInstance(unittest.TestCase): @patch(‘__main__.HelloWorld’, spec=HelloWorld) def test_mock(self,MK): print type(MK) MK.say_it.return_value = ‘I am fake’ v = i_call_hello_world(MK) print v if __name__ == ‘__main__’: c = HelloWorld() […]