PyUnit中是否弃用了测试套件?

时间:2010-06-25 20:06:55

标签: python unit-testing python-unittest

按照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来说并没有用。

这是对的吗?

2 个答案:

答案 0 :(得分:4)

如果你想在单个模块中运行所有测试,则不需要<。> unittest.TestSuite,因为unittest.main()将动态检查从中调用的模块,并查找从unittest.TestCase派生的所有类

但是,TestSuite类在许多场景中仍然很方便:

  1. 您想构建一组逻辑分组的测试。例如,一套单元测试,集成测试,特定子系统的测试等等。
  2. 您测试跨多个模块/包。在这种情况下,使用单个脚本运行执行所有测试非常有用。这可以通过构建一套所有测试来完成。请注意,这与discovery
  3. 等库无关

答案 1 :(得分:3)

除了Mark的回答之外,构建自己的套件()的另一个原因是,如果您正在动态构建测试。

另外,我花了一些时间来弄清楚如何让PyDev拿起套件并在图形测试运行器中运行它。诀窍是放入一个类似的方法:

def load_tests(loader, tests, pattern):
    return suite()

这样的方法被选中了图形测试运行器。