XojoにもJUnitの様な仕組みがあった!XojoUnitDesktopで複数のテストクラスを登録する方法。
XojoでJUnitの様な単体テストを実現するXojoUnit。今回初めて使いましたが、ネットで見つけた情報はテストクラスを1つ指定して実行する方法のみ・・・。
テストを分類毎にグループ分けして整理し、複数のテストグループを同時に動かすにはどうすればいいのか?と考えはじめました。TestGroupsと言うくらいなのだから複数追加はできるはず・・・。
その方法です。
目次
ここまでの経緯
Xojoを使ってデスクトップアプリの開発をしています。その中で単位換算するプログラムを書いていて、せっかくなら・・・と今後を見据え、今回アプリで使わない機能まで実装していたのですが・・・
これ、今回使わない部分のテストもしたいけどどうするんだ?という疑問が沸きました。 Java言語 で言うところの JUnit の様な単体テストをサポートするものがないのか!?と・・・。
ありました。普通に標準で。
Xojoにはサンプルアプリケーションとして XojoUnitDesktop.xojo_binary_project というプロジェクトが付属しています。それをカスタマイズする形で作ったコード群(ライブラリ)をテストできるわけです。
今回はここまで知っている前提で、試行錯誤でなんとか実装できた「自分で追加したテストクラスをテスト実行対象に登録する方法」を紹介することにしました。
Xojo Unit を始める雛形となるサンプルアプリケーション
Xojo には、アプリケーション開発をさらに簡単に開発できるサンプルアプリケーションが付属しています。サンプルだからと参考にするだけでなく、雛形としても大活躍します。
Xojo Unit も「サンプルアプリケーション」から「Unit Testing」→「XojoUnit」と辿った中にある「XojoUnitDesktop.xojo_binary_project」を雛形とすることで簡単に利用できます。
アプリケーションを実行すると、デスクトップ上で動かせるテストクラスが起動します。(XojoUnitDesktopだから)
サンプルアプリケーションにはAssertionという1つのテスト
XojoUnitDesktop を実行すると、左側のリストには「Assertion」というテストグループが1個だけ表示されています。
この後どうすればいいのだろう・・・とネットで調べて見ると、「自分が実行したいテストクラスを作成して、このAssertionと置き換える様にコードを少し変えてやればいい」と載っていました。
Xojoでユニットテストを行う方法 | Xojo|グレープシティ株式会社
参考にしたページです。
テストクラスを実装
テストクラスは任意の名前で作成します。Superのところに”TestGroup”を指定さえしてやれば、どんなクラス名でも問題ありません。
ちなみに・・・
クラス内のテスト対象のメソッドは必ず”Test”で終わる名前にしなければなりません。
何故こんなルールが?と思う方もいるかもしれませんが、この命名ルールのおかげでテストクラス内で共通に使いたいメソッドを定義したとしても”Test”で終わらない名前ならば、誤ってTest実行されたりしないので便利です。
参考にしたテストクラスの差し替え方法・・・
先ほど紹介したブログでは、InitializeTestGroupsというイベントに実装された部分のクラス名を、以下の様に自作したクラス(例ではNCMBクラスをNCMBというグループ名で登録)に差し替えてやればOKと書かれていました。
group = new NCMB.Tests(self, "NCMB")
もちろん間違いはないのですが、差し替えると先ほどまで”Assertion”がテスト実行対象だったところが”NCMB”に変わるのみ。
私がやりたいのは、「テストの内容によって複数のテストクラスを作ってXojoUnitで複数のテストを一度に実行する」ということ。
これでは目的は果たせません。
Newしてインスタンス化してやればOK!
実は何故そうなるのか分かっていないのですが・・・、試行錯誤の末、サンプルにもともと実装されていた「New XojoUnitTest」の行はそのままに、追加した自作クラスを New する行も書いてやれば、複数のテストグループをテスト対象にできることが分かりました。
Dim group As TestGroup
group = New XojoUnitTests(Self, "Assertion")
group = New ConstructorPattern(Self, "コンストラクタ")
これは、今回自作したConstructorPatternというテストクラスを”コンストラクタ”というグループ名で追加した例です。
2つのグループを追加することに成功
XojoUnitDesktopを実行すると、サンプルアプリケーションにもともとあった “Assertion”というテストグループに加え、”コンストラクタ”というテストグループも追加されたことが分かります。
これで無事、2つのテストグループを追加することに成功しました。
あとは元々のテストクラスを消して、同じ要領で自作のテストクラスを追加していけばOKです。
ちなみに、グループの右側にあるチェックボックスをOFFにするとテスト実行時にスキップ対象となるので、テストをうまくグループ化してまとめてやればテスト効率を高められます。