#02/14/2002 修正
#10/24/2001 新規作成

SUnit(testing framework) の使い方

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環境)
SUnitフレームワーク TestCaseの処理概要 に全体構成の簡単な資料になります。 詳しい資料としては、下記の書籍をご覧下さい。 翔泳社 eXtreme Programming テスト技法 -xUnitで始める実践XPプログラミング- SUnitのページ http://minnow.cc.gatech.edu/squeak/1547 Kent Beck のオリジナルペーパー Simple Smalltalk Testing: With Patterns [Kent Beckエs original Smalltalk testing paper] http://www.xprogramming.com/testfram.htm (以上)