类内部的鼻子测试生成器
可以在自定义类里面运行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