2011-07-14 21 views
18

Czy w niestandardowych klasach można uruchomić generatory testu nosa? Próbuję przekonwertować example do prostego klasy wersji opartej na:Generatory testu nosowego wewnątrz klasy

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 

że wyniki w

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

miałem wygląd poprzez changelogu i wierzę, że to powinno działać od wersji 0.9.0a1.

Gdzie się mylę?

Odpowiedz

33

Rozwiązaniem jest mniej spodziewane jeden: zrobić NIE podklasy z unittest.TestCase aby mieć nosetests odkryć metodę generatora. Kodeks pracy z nosetests 1.1.3 (najnowsza z 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 

także skorzystać TestA zamiast 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

To jest do bani; byłoby miło móc użyć assertRaisesRegexp dla unittest:/ –

+4

@ChrisR: Możesz użyć 'nose.tools.assert_raises_regexp' –

+0

Aby dodać do tej odpowiedzi, teraz dokumentuje to zachowanie. "Należy zauważyć, że generatory metod nie są obsługiwane w podklasach unittest.TestCase." http://nose.readthedocs.org/en/latest/writing_tests.html –

-6

wierzę trzeba podklasy 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

Dzięki, że działa. – Longestline

+0

To nie działa dla mnie, używając nosa 1.1.2 –

+0

to też tutaj nie działa. – user983716

Powiązane problemy