Class中的鼻子测试生成器

时间:2011-07-14 06:57:26

标签: python generator nose

是否可以在自定义类中运行nose测试生成器?我正在尝试将example转换为基于类的简单版本:

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 个答案:

答案 0 :(得分:35)

解决方案是较不期望的解决方案:从unittest.TestCase 执行 NOT子类,以便让nosetests发现生成器方法。代码使用nosetests 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

答案 1 :(得分:-7)

我相信你必须继承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