Python ユニットテスト用の拡張ライブラリを公開しました
ext-unittest を GitHub に公開してみました。
インスタンスの同等性を評価するためのユニットテスト拡張ライブラリです。 QUnit で謂う所の same(actual, expected) のような動作が期待されます。 オブジェクト ID の異なる二つのインスタンスを比較する目的で利用できます。
ext-unittest/ext_unittest.py at master · shobon/ext-unittest · GitHub
unittest.TestCase クラスを継承しているため、従来のユニットテストコードを継続して利用することが可能です。
このユニットテスト用ライブラリのテストコードも別にあるのですが、それはまた後日。
標準ライブラリ unittest.TestCase の assertEqual() メソッドは、インスタンスのアイデンティティ(オブジェクト 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)
シンプルですが、個人的にお気に入りのライブラリです(^ω^ )