Xojo日本語ブログ

マルチプラットフォーム対応アプリが開発できるXojoのブログです。

Xojoでユニットテストを行う方法

プロダクトの品質を高めるためにテストは欠かせません。テスト手法は幾つかありますが、クラスなどの動作を保証する際にはユニットテストが多く用いられています。

今回はXojoでユニットテストを導入する方法を紹介します。

サンプルアプリケーションから取り込む

まず最初にサンプルアプリケーションの中にある Unit Testing > XojoUnit の中から開発しているプロダクトに合わせて開きます。用意されているのは、Web/デスクトップ/コンソールの3種類です。

f:id:moongift:20161006184113p:plain

開いたら XojoUnit フォルダを自分のプロジェクトツリーにコピーします。

f:id:moongift:20161006184151p:plain

ユニットテストを書く

次にテストを行いたいクラスにテスト用のクラス(Testsなど)を追加します。親クラスを TestGroup とします。

f:id:moongift:20161006184225p:plain

テストはテストクラスにメソッドを追加していくだけですが、その際にメソッド名を必ず Test で終わる必要があります( SetKeyTest など)。

ユニットテストの書き方は、 Assert オブジェクトに二つのデータを与えて比較するというものになります。例えば文字列が正しいかどうかを確認する場合は次のようになります。

// 最初の引数が期待する結果
Assert.AreEqual("aaa", NCMB.applicationKey)

Assertには下記のようにメソッドがあります。同じか、違うか、一致するかしないかという4つのメソッドでチェックします。

f:id:moongift:20161006184554p:plain

グループの設定

次にテストを実行するために XojoUnit > ○○TestController のイベント、 InitializeTestGroup を変更します。○○はDesktop/Web/Consoleという文字が入ります。そして、内容を次のように変更します。

group = new NCMB.Tests(self, "NCMB")

f:id:moongift:20161006184259p:plain

NCMBというのはテストしたクラス名で、先ほど Tests というメソッドを追加したクラスになります。二つ目の引数である "NCMB" という文字列は分かりやすい識別子をつけておけば良いでしょう(通常はクラス名で良いでしょう)。

アプリケーション起動時にテスト

アプリケーションを起動した際にテストが行われるためには、まずメインウィンドウの Open イベントに下記のように記述を行います。

if System.CommandLine.InStr("-test") <> 0 then
  XojoUnitTestWindow.Show
  XojoUnitTestWindow.RunTests
end if

次にビルド設定の共有の中にある Command Line Arguments に -test と指定をします。

f:id:moongift:20161006184342p:plain

これで準備は完了です。

テストを実行する

先ほど設定を行った通り、アプリを起動したタイミングで自動的にテストが行われて結果が返ってきます。

f:id:moongift:20161006184413p:plain


ユニットテストはUIがないものに対して使うのが一般的で、そのためクラスなどに対して行うのが良いでしょう。UI側のコード量を減らしてクラスをきちんと設計することにより、MVC(モデル - ビュー - コントローラ)が明確に分かれ、メンテナンスしやすいコードになるのではないでしょうか。

ユニットテストを書くことでリファクタリングしやすくなったり、各メソッドが分かりやすくなります(テストしやすいメソッドはコード量も短く、結果も明確になります)。ぜひXojoでもユニットテストをしっかり行ってください。