どれどれ、と読んでみるとせっかくIronPythonを使用しているのに、unittestモジュールを使用していないではありませんか。
もしかしたら当時のIronPythonには、まだunittestモジュールが含まれていなかったのかもしれません。
unittestモジュールを使用すれば、もっと簡単にテストが書けると思われるので、試してみます。
unittestモジュールの詳しい説明は割愛します。公式のドキュメントなどを参照してください。
テストコード
unittestモジュールを使用して書きなおしたテストが以下になります。
元の記事と同様、3番目のテストケースはスキップするようにしました。
# -*- coding: shift-jis -*- import clr import unittest clr.AddReferenceToFileAndPath('Class1.dll') from TwoCardPokerLib import Hand class HandTest(unittest.TestCase): def test_royal_flush_wins_pair_aces(self): h1 = Hand('Ac', 'Kc') h2 = Hand('Ad', 'As') self.assertEquals(1, h1.Compare(h2)) def test_straight_flush_diamonds_eq_straight_flush_hearts(self): h1 = Hand('Td', '9d') h2 = Hand('Th', '9h') self.assertEquals(0, h1.Compare(h2)) @unittest.skip('') def test_straight_loses_ace_high(self): h1 = Hand('Ah', '2c') h2 = Hand('As', '9c') self.assertEquals(1, h1.Compare(h2)) def test_flush_9_6_high_loses_flush_9_7(self): h1 = Hand('9h', '6h') h2 = Hand('9d', '7d') self.assertEquals(-1, h1.Compare(h2)) def test_king_high_loses_ace_high(self): h1 = Hand('Kc', 'Jh') h2 = Hand('As', '5d') self.assertEquals(-1, h1.Compare(h2))
テスト結果
テストの実行結果は以下のようになります。
C:\>ipy.exe -m unittest -v testhand test_flush_9_6_high_loses_flush_9_7 (testhand.HandTest) ... FAIL test_king_high_loses_ace_high (testhand.HandTest) ... ok test_royal_flush_wins_pair_aces (testhand.HandTest) ... ok test_straight_flush_diamonds_eq_straight_flush_hearts (testhand.HandTest) ... ok test_straight_loses_ace_high (testhand.HandTest) ... skipped '' ====================================================================== FAIL: test_flush_9_6_high_loses_flush_9_7 (testhand.HandTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "c:\testhand.py", line 29, in test_flush_9_6_high_loses_flush_9_7 self.assertEquals(-1, h1.Compare(h2)) AssertionError: -1 != 0 ---------------------------------------------------------------------- Ran 5 tests in 0.164s FAILED (failures=1, skipped=1)
元記事との比較
元記事と比較して、テストランナーを実装していない分、工数を減らす効果はあったと思います。
反面、テストケースの追加については、元記事ではテキストファイルに1行追加するだけなのに対して、unittestを使用した場合はメソッドの定義が必要になっています。サードパーティ製のユニットテストフレームワークであるpytestはパラメータ化されたテストにも対応しているようなので、検討する価値があると思いました。
参考
0 件のコメント:
コメントを投稿