类内部的鼻子测试生成器

20 投票
2 回答
7878 浏览
提问于 2025-04-16 21:29

可以在自定义类里面运行nose测试生成器吗?我正在尝试把这个例子转换成一个简单的基于类的版本:

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 个回答

-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
37

解决方案其实是个意想不到的选择:为了让nosetests找到生成器方法,不要从unittest.TestCase继承。以下是与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

撰写回答