SUnitは、Kent Beck が提案したテスティングフレームワークです。その後、GoFのGammaと共に開発した JUnit などと共にxUnitシリーズを構成し、XPには欠かせないツールとなっています。
SUnitの使い方は以下の通りです。
1 TestCase のサブクラスを作成する
例:TestCase subclass: #TestBankAccount
2 テストする各クラスのメソッドごとに、テストケースを書く。
・メソッド名の頭を test*** としておけば良い。自動的に選択され、実行される。
・メソッドの振る舞いに対して制約値、期待値を論理式で書いておく。
assert: balance = 1005 balance=1005 であること。assert: balance > 0 0より大きいこと。
assert:aBoolean aBoolean であること。 deny:aBoolean aBoolean でないこと。
should:aBlock aBlock であること。 shouldnot:aBlock aBlock でないこと。
・必要なら、setup で初期化(事前)処理、teardown で終了(事後)処理を書く
3 TestRunner のインスタンスにこのテストケースの集合(TestSuite テストスィート)を渡す。
テキストモードとGUIモードがある。
テキストモードの例:TestRunner new runTests: 'TestBankAccount'
4 test*というメソッド名を持つ各テストは自動的に実行される。
実行エラーは error、失敗(制約と異なる時)は failure が表示される。
詳細は、SUnit のサンプルソースとして同梱されている、Scan-Test のソースをごらん下さい。念のため、リンク(SCAN-Test)しておきます。
【簡単な実例】
BankAccount BankAccount.st を使った実装例 TestBankAccount.st で簡単な例を示します。
BankAccountは、new すると残高5(unit)になるという変な仕様です。
testdeposit では、1000unit 預金しますので、残高は1005unit になることを期待しています。
testdeposit
| ba2 |
ba2 := BankAccount new deposit:1000.
ba2 inspect.
self assert: ba2 balance = 1005.
testdeposit では、1unit出金しますので、残高は 4unit になることを期待しています。
testwithdraw
| ba |
ba := BankAccount new withdraw:1.
ba inspect.
self assert: ba balance = 4.
TestRunner new runTest: 'TestBankAccount'
(TestBankAccount start)
として実行すると、2つのテスト(メソッド)が実行され、失敗(failed)0、エラー(errors)0 と
表示されて全てのテストが通りました。
<実行例>
![]() | |
![]() TestRunner のコメント テキストベースのインタフェース。 TestRunner runTests または TestRunner runTests: '*test*' で実行できる | ![]() |
![]() |
(上) TestModel の使い方 *TestingFrameworkPaper を見て(下のリンク) *TestModel(左) *TestRunner(左上) <- TestModel のコメント GUIベースのインタフェース。 TestModel openAsMorph (morphic環境)または TestModel open (MVC環境) |