ソフトな忘却力(39) Smalltalk、Pharo、Unit Testをやれよ

Joseph Halfmoon

忘却力の老人は、前回、Pharo様のClass定義の流儀に戸惑いを隠せませんでした。まあツールが至れり尽くせりやってくれるのに慣れてなかったです。さてその際、TDD(テスト駆動開発)を標榜されているPharo様なのに、とてもユニットテストの方法など一度に覚えられんと後回しにしてしまいました。今回はそこね。後づけ。

※「ソフトな忘却力」投稿順 Index はこちら

※今回の動作確認は、Windows11上のWSL2の上のUbuntu24.04LTS上のPharo 10.0.0を使用しています。

Pharoのユニットテスト

モダーンで強力なツール群を統合しているPharoの開発環境にテスト・フレームワークというかテストランナーというかが組み込まれていないわけはありませぬ。当然、先にテスト書いて走らせて、ターゲットのメソッドが不在で落ちたら、デバッガの中でこちょこちょメソッド書いて、再テストOKってな行き方もありみたいです。知らんけど。

さて前回は、以下の文書のChapter 5 を読みながら実習したというのに、テストの部分を抜かしてました。

Pharo by Example 9 – 2022 Edition

今回はその部分を補うの回です。まずはTest用のClassの定義からTestClass

通常のClassは、Objectをスーパークラスにして作成しましたが、Test用のClassはTestCaseというクラスをスーパークラスにして定義するようです。

テストクラスを作ったらその中にテスト用のメソッドを定義していきますが、その方法は前回やった通常のClassのインスタンスメソッドを作るのと変わりありません。こんな感じ。testMethodRuns
実は、CTRL+Sでコンパイルした直後はメソッド名の先頭にはオレンジ色というか茶っぽい感じのアイコンだったのです。そこをクリックしてやるとそのテストメソッドが走り、パスすると緑色に変わります。どのくらいのテストしてパスがいくつ、フェイルがいくつといった数字は一時的なウインドウ(一定時間たつと消える設定みたい)に表示されます。これはテストメソッドに限らず、テストクラスでも同じ。クラスでやれば配下の全てをテストしてくれるみたい。

前回作成したMyCounterクラス用のテストメソッドの作成、一応完了。全パスね。addMoreTestMethod

しかし、知らない間にCommentとか、タブが増えているのでないかい。そういえばテストクラス用にコメントとか入力してなかったけど。Commentタブを開いてみます。こんな感じ。testClassComment

形式的なもんとは言え、全自動でテストクラスのコメントを生成してくれているみたい。ほ~。

お隣のsetUpタブは、テストのセットアップ用のメソッドの入れ物みたいです。ここは実体はなし、入れもの準備しただけみたい。setup

さて、開いてちょっとのけぞったのがUML-Classタブです。前回のクラス定義ではチッコい箱が一つだけ、質素なクラス図だったですが、今回はほれこのように。testClassUML

頼みもしないのに描いていただけるのね。でもちょっと表示が細かすぎん?しかし、マウスカーソルを持っていくと、こんな感じ。UML1

拡大されて読めるようになりました。拡大されるだけではありませぬ。メソッドのところにカーソルを当てるとどうよ。UML2

メソッドの中身も見えます。当然、スーパークラスも同様。アサーションの実体であるらしいTestAsserterクラスが以下に。UML3

今回お世話になっている、assert:equals:のコードが以下に。UML4

Pharo様、半端ないって。

ソフトな忘却力(38) Smalltalk、Pharo、最初のクラス定義に戸惑う へ戻る

ソフトな忘却力(40) Smalltalk、Pharo、Iceberg、氷山?でバージョン管理 へ進む