Python ユニットテスト用の拡張ライブラリを公開しました

ext-unittestGitHub に公開してみました。
インスタンスの同等性を評価するためのユニットテスト拡張ライブラリです。 QUnit で謂う所の same(actual, expected) のような動作が期待されます。 オブジェクト ID の異なる二つのインスタンスを比較する目的で利用できます。
ext-unittest/ext_unittest.py at master · shobon/ext-unittest · GitHub
unittest.TestCase クラスを継承しているため、従来のユニットテストコードを継続して利用することが可能です。
このユニットテスト用ライブラリのテストコードも別にあるのですが、それはまた後日。


標準ライブラリ unittest.TestCaseassertEqual() メソッドは、インスタンスアイデンティティ(オブジェクト ID )を評価する感じだったので、クラスや属性の同等性でインスタンスを評価するライブラリがどうしても必要だったのです。

#
# ext_unittest.py
#
class TestCase(unittest.TestCase):

    def assertEqualForProperties(self, first, second, label=None)
    """
    オブジェクト first, second のクラスまたは属性値が等しくない場合、テスト失敗を通知する。
    """

    def assertNotEqualForProperties(self, first, second, label=None)
    """
    オブジェクト first, second のクラスと属性値が等しい場合、テスト失敗を通知する。
    """

    def assertFalseForObject(self, obj, label=None)
    """
    obj が真の場合、テスト失敗を通知する。
    """
  • 使い方
# テスト用のクラスを定義
class Month(object):
    def __init__(self, name):
        self.name = name
        
class Day(object):
    """ Month と同じプロパティを持つクラス """
    def __init__(self, name):
        self.name = name


import ext_unittest
# テストケース
class ExtUnittestTestCase(ext_unittest.TestCase):

    def test_for_different_objects(self):
        june = Month('June')
        july = Month('July')  # june と同じクラスのインスタンス
        one = Day('June')  # june と同じ属性値を持つ異なるクラスのインスタンス
        # 001
        try:
            self.assertEqualForProperties(june, july)
            self.fail("例外の発生が確認できませんでした")
        except:
            pass
        # 002
        try:
            self.assertEqualForProperties(june, one)
            self.fail("例外の発生が確認できませんでした")
        except:
            pass
        # 003
        self.assertNotEqualForProperties(june, july)
        # 004
        self.assertNotEqualForProperties(one, june)

シンプルですが、個人的にお気に入りのライブラリです(^ω^ )