Тестовые генераторы носа внутри класса - PullRequest
19 голосов
/ 14 июля 2011

Можно ли запускать генераторы носового теста внутри пользовательских классов? Я пытаюсь преобразовать пример в простую версию на основе классов:

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

Это приводит к

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

Я просмотрел список изменений и считаю, что это должно работать с версии 0.9.0a1 .

Куда я иду не так?

Ответы [ 2 ]

35 голосов
/ 19 июня 2012

Решение является менее ожидаемым: сделайте НЕ подкласс от unittest.TestCase, чтобы тесты носа обнаружили метод генератора. Код, работающий с тестами носа 1.1.3 (последний из 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

Также используйте TestA вместо 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 голосов
/ 21 июля 2011

Полагаю, вам нужно создать подкласс 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
...