GeneXus 16の新機能として、「ユニットテストオブジェクト」が追加されました。
GeneXusは単体テストが不要なのにユニットテスト用のオブジェクトが追加されたのか、と思われるかもしれませんが、所謂コードレベルの単体テストではなく、オブジェクトをテストするためのオブジェクトになります。
具体的な例を見た方がわかりやすいと思いますので、下記のプロシージャに対して、ユニットテストを実行していきたいと思います。
1 2 3 4 5 |
[Sourceエレメント] &out = &in + 1 [Rulesエレメント] Parm(in:&in, out:&out); |
引数に1を加算して返す、というプロシージャです。
ユニットテストの実行手順
- プロシージャオブジェクト上で右クリックをし、「ユニットテストを作成」を選択します。
- 該当のオブジェクトの下位にユニットテスト、データプロバイダ、SDTのオブジェクトが生成されます。
なお、操作と同時にRoot Module内に「UITest」という外部オブジェクトが作成されていました。
生成されたユニットテストオブジェクトの実態はプロシージャと同じようですが、このオブジェクトがテスト実行するためのオブジェクトになります。 - 生成されたデータプロバイダーはテストデータを定義するためのオブジェクトになります。
このデータではテストが失敗になるので、3行目と4行目を下記のように書き換えました。
12in = 1Expectedout = 2 - GeneXusのツールバーに「テスト」が追加されています。今回はテストエクスプローラーを選択します。
- 普段プロパティなどが表示される右側のパネルに、テストエクスプローラーが表示されるので、実行したいテストにチェックを入れ、実行ボタンを押下します。
- ビルドが実行され、テスト結果のパネルが表示されます。
期待値と実際の値が一致したため、合格で表示されました。
なお、ユニットテストの初回の実行時に、Root Moduleにテスト実行するためのプロシージャが2本生成されていました。
対象
ユニットテストオブジェクトは手動で1から作成することもできますが、上記の例のように自動で生成してくれるのは、プロシージャとデータプロバイダのみのようです。
注意点
ユニットテストは実際にプログラムが実行されるので、DBの操作(特にレコードの削除)が伴うプロシージャを何度もテストする場合には、テストが正常に実行できるようにテストデータを準備する必要があります。
まとめ
これまでGeneXusで開発したプログラムのほとんどのテストは、UIを通して実施していましたが、ユニットテストのサポートにより、GeneXus IDE上で確認できるようになりました。
また、まとめてユニットテストを実行することもできるので、テストを素早く完了させることができます。
2019.07.18 追記
上記の操作はGXtestのライセンスがなくてもできました。
GXtestのライセンスは、UIのテストをGeneXus内から実行する場合やCI/CD連携時などに必要のようです。
2019.07.29 追記
ライセンスに関するwikiを見つけましたので、共有させていただきます。
GeneXus Wiki – GXtest v4 Licensing
https://wiki.genexus.com/commwiki/servlet/wiki?41571,GXtest+v4+Licensing,