2010/10/7 Tomas Zulberti <[email protected]>:
> 2010/10/7 Manuel Jesús Recena Soto <[email protected]>:
>> Hola, buenas tardes:
>>
>> ¿Alguien con experiencia en unittest?
>> Estoy codificando un test y me gustaría darlo como bueno si se lanza
>> una cierta excepción. Para eso tengo que usar assertRaises() pero no
>> sé porqué, no funciona. Alguna referencia?
>>
>
> Se usa asi:
> self.assertRaises(Exception, metodo_sin_parantesis, valor1, valor2, valor3)
>
> donde
> def metodo_sin_parantesis(param1, param2, param3):
> pass
>
> es decir, en el assertRaises va la funcion, pero sin los parentesis y
> los valores. El assertRaises lo va a ejecutar.
>
Estilo tradicional (extraido de la doc stdlib)
{{{
#!python
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = range(10)
def test_shuffle(self):
# make sure the shuffled sequence does not lose any elements
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, range(10))
def test_choice(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
def test_sample(self):
self.assertRaises(ValueError, random.sample, self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
}}}
En versiones recientes también es possible utilizar esta función como
context manager (extraido del blog de Michael Foord [2]_ ) e.g.
{{{
#!python
as context manager
with self.assertRaises(TypeError):
add(2, '3')
# test message with a regex
msg_re = "^You shouldn't Foo a Bar$"
with self.assertRaisesRegexp(FooBarError, msg_re):
foo_the_bar()
# access the exception object
with self.assertRaises(TypeError) as cm:
do_something()
exception = cm.exception
self.assertEqual(exception.error_code, 3)
}}}
También es posible utilizar una versión modificada
(TracRpcTestCase.failUnlessRaises) [3]_ que permite seguir el estilo
tradicional, y al mismo realizar verificaciones sobre el objeto (i.e.
excepción) que se ha lanzado.
PD: El chivo que ven ahí [2]_ tiene poderes psíquicos sobre todos
aquellos que escriban pruebas en Python [4]_ [5]_ [6]_ [7]_ . Tenganlo
muy en cuenta, y sacrifiquen unos cuantos pollos antes de escribir sus
pruebas, sino 80% asegurado a que no serán satisfactorias ...
:D
Sigan los hilos más abajo y se reirán un poco ...
;o)
.. [1] No hay 1
(por qué siempre tiene que haber 1 ? ;o)
.. [2] Coming changes to unittest in Python 2.7 & 3.2
(http://www.voidspace.org.uk/python/articles/unittest2.shtml#assertraises)
.. [3] TracRpcTestCase.failUnlessRaises
(http://bitbucket.org/osimons/trac-rpc/src/fa00f1619d65/trunk/tracrpc/tests/__init__.py)
.. [4] [TIP] [OT] Goats of PyCon
(http://lists.idyll.org/pipermail/testing-in-python/2010-February/002691.html)
.. [5] [TIP] [OT] The Testing Goat's World Tour
(http://lists.idyll.org/pipermail/testing-in-python/2010-March/002897.html)
.. [6] Goats of PyCon - The Real Story
(http://www.swordstyle.com/blog2/?p=1822)
.. [7] TIP] [OT] Goats of PyCon - Doug Hellmann' comment -- :D
(http://lists.idyll.org/pipermail/testing-in-python/2010-February/002695.html)
--
Regards,
Olemis.
Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/
Featured article:
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/