Articles of prueba de unidad

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() […]

Envuelve un flujo abierto con io.TextIOWrapper

¿Cómo puedo envolver un flujo binario abierto – un file Python 2, un io.BufferedReader Python 3, un io.BytesIO – en un io.TextIOWrapper ? Estoy tratando de escribir código que funcione sin cambios: Corriendo en Python 2. Corriendo en Python 3. Con flujos binarios generados desde la biblioteca estándar (es decir, no puedo controlar qué tipo […]

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() […]

Afirmar una función / método no fue llamado usando Mock

Estoy usando la biblioteca Mock para probar mi aplicación, pero quiero afirmar que no se ha llamado a alguna función. Los mock.assert_called_with mock.assert_called_once_with hablan de métodos como mock.assert_called_with y mock.assert_called_once_with , pero no encontré nada como mock.assert_not_called o algo relacionado para verificar que el simulacro NO fue llamado . Podría ir con algo como lo […]