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

しかし、それは私が削除しても

def suite():
、結果は同じです。言い換えれば、フィクスチャ/スイートはPyUnitでは役に立たないように見えます。

これは正しいです?

4

2 に答える 2

4

unittest.main()は、呼び出されたモジュールを動的に調べ、unittest.TestCaseから派生したすべてのクラスを見つけるため、単一のモジュールですべてのテストを実行する場合は、unittest.TestSuiteは必要ありません。

ただし、TestSuiteクラスは、多くのシナリオで引き続き便利です。

  1. テストの論理グループのセットを作成する必要があります。たとえば、一連の単体テスト、統合テスト、特定のサブシステムのテストなどです。
  2. テストは複数のモジュール/パッケージにまたがります。このシナリオでは、実行できる単一のスクリプトですべてのテストを実行すると便利です。これは、すべてのテストのスイートを構築することで実現できます。これは、 discoveryなどのライブラリとは無関係になることに注意してください。
于 2010-06-29T02:50:38.263 に答える
3

Markの答えに加えて、独自のsuite()を構築するもう1つの理由は、動的にテストを構築している場合です。

また、PyDevにスイートを取得して、グラフィカルテストランナーで実行する方法を理解するのに少し時間がかかりました。秘訣は、次のような方法を導入することです。

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

このような方法は、グラフィカルなテストランナーに採用されます。

于 2011-09-09T23:35:38.477 に答える