どれどれ、と読んでみるとせっかく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 件のコメント:
コメントを投稿