2

按照 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()

但问题是,即使我删除

定义套件():
, 结果是一样的。换句话说,看起来fixture/suite 对PyUnit 来说并不是没用的。

这个对吗?

4

2 回答 2

4

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

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

  1. 您想要构建一组测试的逻辑分组。例如,一套单元测试、集成测试、特定子系统的测试等。
  2. 您的测试跨越多个模块/包。在这种情况下,让您可以运行一个脚本来执行所有测试很有用。这可以通过构建一个包含所有测试的套件来完成。请注意,这与discovery等库无关。
于 2010-06-29T02:50:38.263 回答
3

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

此外,我花了一段时间才弄清楚如何让 PyDev 拿起套件并在图形测试运行器中运行它。诀窍是放入这样的方法:

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

这种方法被图形测试运行程序所采用。

于 2011-09-09T23:35:38.477 回答