20

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

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 开始工作。

我哪里错了?

4

2 回答 2

36

解决方案是不太预期的解决方案:不要子类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
于 2012-06-19T01:38:48.717 回答
-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
于 2011-07-21T16:18:49.803 回答