2011-07-14 11 views
18

È possibile eseguire generatori di test del naso all'interno di classi personalizzate? Sto cercando di convertire la example in una semplice versione basata classe:Generatori di test del naso all'interno della classe

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 

che si traduce in

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

ho avuto uno sguardo attraverso il changelog e ritengono che questo dovrebbe funzionare a partire dalla versione 0.9.0a1.

Dove sto andando male?

risposta

33

La soluzione è il meno atteso: fare NON sottoclasse da unittest.TestCase al fine di avere nosetests scoprire il metodo del generatore. Codice a lavorare con nosetests 1.1.3 (l'ultima da 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 

Inoltre, utilizzare TestA invece di 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

Che schifo; sarebbe bello poter usare assertRaisesRegexp di unittest per questo:/ –

+4

@ChrisR: Puoi usare 'nose.tools.assert_raises_regexp' –

+0

Per aggiungere a questa risposta, nose ora documenta questo comportamento. "Si noti che i generatori di metodi non sono supportati nelle sottoclassi unittest.TestCase." http://nose.readthedocs.org/en/latest/writing_tests.html –

-6

Credo che devi sottoclasse 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

Grazie, funziona. – Longestline

+0

Questo non funziona per me, usando il naso 1.1.2 –

+0

non funziona anche qui. – user983716

Problemi correlati