2011-07-14 9 views
18

¿Es posible ejecutar generadores de prueba de nariz dentro de clases personalizadas? Estoy tratando de convertir el example en una simple versión basada en la clase:Generadores de prueba de nariz dentro de la clase

file: trial.py 
>>>>>>>>>>>>>> 
class ATest(): 
    def test_evens(self): 
     for i in range(0, 5): 
      yield self.check_even, i, i * 3 

    def check_even(self, n, nn): 
     assert n % 2 == 0 or nn % 2 == 0 

que se traduce en

$ nosetests -v trial.py 
---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

yo tuvimos un vistazo a través de la lista de cambios y creemos que esto debería funcionar desde la versión 0.9.0a1.

¿Dónde me estoy equivocando?

Respuesta

33

La solución es la menos esperada uno: hacer NO subclase de unittest.TestCase el fin de tener nosetests descubrir el método generador. Código trabajar con nosetests 1.1.3 (la última de GitHub):

class TestA(object): 
    def test_evens(self): 
     for i in range(0, 5): 
      yield self.check_even, i, i * 3 

    def check_even(self, n, nn): 
     assert n % 2 == 0 or nn % 2 == 0 

También, el uso TestA en lugar de ATest.

test.py:2: TestA.test_evens[0] PASSED 
test.py:2: TestA.test_evens[1] FAILED 
test.py:2: TestA.test_evens[2] PASSED 
test.py:2: TestA.test_evens[3] FAILED 
test.py:2: TestA.test_evens[4] PASSED 
+0

Eso apesta; Sería bueno poder usar assertRaisesRegexp de unittest para esto:/ –

+4

@ChrisR: Puede usar 'nose.tools.assert_raises_regexp' –

+0

Para agregar a esta respuesta, nose documenta ahora este comportamiento. "Tenga en cuenta que los generadores de métodos no son compatibles con las subclases unittest.TestCase". http://nose.readthedocs.org/en/latest/writing_tests.html –

-6

Creo que tiene una subclase unittest.TestCase

import unittest 

class ATest(unittest.TestCase): 
    def test_evens(self): 
     for i in range(0, 5): 
      yield self.check_even, i, i * 3 

    def check_even(self, n, nn): 
     assert n % 2 == 0 or nn % 2 == 0 
+0

Gracias, eso funciona. – Longestline

+0

Esto no funciona para mí, con la nariz 1.1.2 –

+0

no funciona aquí también. – user983716

Cuestiones relacionadas