PyUnit中的测试套件被弃用了吗?
根据PyUnit的例子,我写了以下的单元测试代码,运行得很好。
import unittest
class Board:
def __init__(self, x, y):
self.x = x; self.y = y;
def __eq__(self, other):
return self.x == other.x and self.y == other.y
class BoardTest(unittest.TestCase):
def setUp(self):
self.b10_10 = Board(10,10)
self.b10_10p = Board(10,10)
self.b10_20 = Board(10,20)
def tearDown(self):
pass
def test1(self):
self.assert_(self.b10_10 == self.b10_10p)
def test2(self):
self.assert_(not (self.b10_10 == self.b10_20))
class BoardTest2(unittest.TestCase):
def setUp(self):
self.b10_10 = Board(10,10)
self.b10_10p = Board(10,10)
self.b10_20 = Board(10,20)
def tearDown(self):
pass
def test1(self):
self.assert_(self.b10_10 == self.b10_10p)
def test2(self):
self.assert_(not (self.b10_10 == self.b10_20))
def suite():
suite1 = unittest.makeSuite(BoardTest)
suite2 = unittest.makeSuite(BoardTest2)
return unittest.TestSuite((suite1, suite2))
if __name__ == "__main__":
unittest.main()
但是问题是,即使我把
def suite():去掉,结果还是一样。换句话说,看起来在PyUnit中,fixture/suite并不是没用的。
这样理解对吗?
2 个回答
3
除了Mark的回答,还有一个理由是,如果你是动态生成测试用例的话,自己写一个suite()会很有用。
另外,我花了一段时间才弄明白怎么让PyDev识别这个suite并在图形化测试运行器中运行。诀窍是要写一个像下面这样的函数:
def load_tests(loader, tests, pattern):
return suite()
这样的方法就能被图形化测试运行器识别了。
4
如果你只是想在一个模块里运行所有的测试,其实不需要用到unittest.TestSuite,因为unittest.main()会自动检查它被调用的模块,找到所有从unittest.TestCase派生的类。
不过,TestSuite类在一些情况下还是挺有用的:
- 你想把测试分成几个逻辑组,比如单元测试组、集成测试组,或者某个特定子系统的测试组等等。
- 你的测试分布在多个模块或包里。在这种情况下,有一个可以运行所有测试的单一脚本会很方便。你可以通过构建一个包含所有测试的套件来实现这一点。不过,如果使用像discovery这样的库,这个就不太重要了。