Java automatic generation of single-test code artifact recommendation
1: 背景
多くの企業では、ブランチの単体テストカバレッジに一定の要件を設けています。たとえば、リリース前に単体テストカバレッジが 60% または 80% に達している必要がある、といったケースです。
開発スケジュールが逼迫している場合は、まず機能の開発とテストを優先し、単体テストは後から補完することになります。
とはいえ、単体テストを手動で記述するのは時間の無駄です。単体テストをある程度自動生成でき、簡単な修正で済むようなプラグインはないでしょうか。
IntelliJ IDEA のプラグインライブラリで関連プラグインを検索して試してみたところ、TestMe というプラグインが使えることがわかりました。また、同僚と情報交換した際、Squaretest を使い続けている同僚から推奨されたので試してみたところ、なかなか良い結果でした。
ここでは、この 2 つのプラグインを簡単に紹介します。
2: おすすめのツール
2.1 Squaretest
2.1.1 概要
メリット:生成されるコードが比較的すっきりとしており、シンプルで、一部のパラメータ構築も支援してくれます。
デメリット:Confirm Mock 機能を使用しない場合、Spring Bean に対して単体テストコードを生成する際、@Setter アノテーションで属性がインジェクションされていると、@Mock 属性が生成されません。これに対応するには、テンプレートを変更してサポートする必要があります(後述します)。
使用方法:
上部メニューの [Squaretest] から最初の項目を選択するか、対応するショートカットキーを使用して単体テストを作成できます。
生成されたコード:
この例は比較的シンプルで、使い方を示すためのものです。実際の使用時にクラスが複雑になると、プラグインの威力を実感できます。
サンプルコード:
生成されたコード
公式デモ 1:テストコードを選択的に生成する
公式デモ 2:モックが必要な属性を選択する
公式デモ 3:単体テスト内でテスト対象のメソッドを選択してテストコードを自動生成する
2.2.2 カスタマイズ
デフォルトテンプレートでは、Spring Bean の単体テストコードを生成する際、Bean が XML で宣言されており、かつ属性が @Setter アノテーションでインジェクションされている場合、@Mock 属性が生成されません。
Confirm Mocks 機能を使用して、モックが必要な属性を選択できます。
このプラグインは、生成テンプレートの調整にも対応しています:
テンプレートに簡単な修正を加えることもできます。すべての @Setter に @Mock アノテーションを自動的に付与するようにします:
依存関係のアノテーション属性に Setter アノテーションを追加します。
2.2 TestMe
2.2.1 概要
機能:
Java の JUnit 4/5、TestNG の単体テストを自動生成
Mockito のモックを自動生成
テストパラメータとアサーション文を自動生成
関連するモックメソッドを自動生成
IntelliJ IDEA メニュー:Code -> TestMe、Code -> Generate
メリット:Spring Bean の単体テストコードを生成する際、@Component アノテーションを使用している場合でも、Setter インジェクションによる属性に対して @Mock と @InjectMock が自動的に付与されます。
デメリット:デフォルトテンプレートでは、生成されたメソッドに throws exception が追加されます。
2.2.2 カスタマイズ
必要に応じてテンプレートを修正できます:
デフォルトテンプレートにはいくつか問題があります:
1. クラスに @RunWith (MockitoJUnitRunner.class) アノテーションが付与されていない
2. 単体テストメソッドにデフォルトで throws exception が追加されるが、不要な場合が多い
3. 下部の TestMe Footer.java の内容は不要
4. @Mock と @InjectMock の間に空白行がない
Junit4&mockito のコピーを作成し(元のファイルは読み取り専用)、修正を加えます:
Junit4&mockito テンプレートのコピーを生成し、修正できます。
3: まとめ
単体テスト自動生成プラグインを柔軟に活用することで、大幅に時間を節約できます。
これら 2 つのプラグインをインストールして試してみて、自分の好みに最も合うものを選んでください。
また、好みに合わせてテンプレートを調整することもできます。
なお、プラグインに過度な期待は禁物です。生成された単体テストは、パラメータの修正やアサーションの追加など、多少なりとも手動での修正が必要です。
多くの企業では、ブランチの単体テストカバレッジに一定の要件を設けています。たとえば、リリース前に単体テストカバレッジが 60% または 80% に達している必要がある、といったケースです。
開発スケジュールが逼迫している場合は、まず機能の開発とテストを優先し、単体テストは後から補完することになります。
とはいえ、単体テストを手動で記述するのは時間の無駄です。単体テストをある程度自動生成でき、簡単な修正で済むようなプラグインはないでしょうか。
IntelliJ IDEA のプラグインライブラリで関連プラグインを検索して試してみたところ、TestMe というプラグインが使えることがわかりました。また、同僚と情報交換した際、Squaretest を使い続けている同僚から推奨されたので試してみたところ、なかなか良い結果でした。
ここでは、この 2 つのプラグインを簡単に紹介します。
2: おすすめのツール
2.1 Squaretest
2.1.1 概要
メリット:生成されるコードが比較的すっきりとしており、シンプルで、一部のパラメータ構築も支援してくれます。
デメリット:Confirm Mock 機能を使用しない場合、Spring Bean に対して単体テストコードを生成する際、@Setter アノテーションで属性がインジェクションされていると、@Mock 属性が生成されません。これに対応するには、テンプレートを変更してサポートする必要があります(後述します)。
使用方法:
上部メニューの [Squaretest] から最初の項目を選択するか、対応するショートカットキーを使用して単体テストを作成できます。
生成されたコード:
この例は比較的シンプルで、使い方を示すためのものです。実際の使用時にクラスが複雑になると、プラグインの威力を実感できます。
サンプルコード:
生成されたコード
公式デモ 1:テストコードを選択的に生成する
公式デモ 2:モックが必要な属性を選択する
公式デモ 3:単体テスト内でテスト対象のメソッドを選択してテストコードを自動生成する
2.2.2 カスタマイズ
デフォルトテンプレートでは、Spring Bean の単体テストコードを生成する際、Bean が XML で宣言されており、かつ属性が @Setter アノテーションでインジェクションされている場合、@Mock 属性が生成されません。
Confirm Mocks 機能を使用して、モックが必要な属性を選択できます。
このプラグインは、生成テンプレートの調整にも対応しています:
テンプレートに簡単な修正を加えることもできます。すべての @Setter に @Mock アノテーションを自動的に付与するようにします:
依存関係のアノテーション属性に Setter アノテーションを追加します。
2.2 TestMe
2.2.1 概要
機能:
Java の JUnit 4/5、TestNG の単体テストを自動生成
Mockito のモックを自動生成
テストパラメータとアサーション文を自動生成
関連するモックメソッドを自動生成
IntelliJ IDEA メニュー:Code -> TestMe、Code -> Generate
メリット:Spring Bean の単体テストコードを生成する際、@Component アノテーションを使用している場合でも、Setter インジェクションによる属性に対して @Mock と @InjectMock が自動的に付与されます。
デメリット:デフォルトテンプレートでは、生成されたメソッドに throws exception が追加されます。
2.2.2 カスタマイズ
必要に応じてテンプレートを修正できます:
デフォルトテンプレートにはいくつか問題があります:
1. クラスに @RunWith (MockitoJUnitRunner.class) アノテーションが付与されていない
2. 単体テストメソッドにデフォルトで throws exception が追加されるが、不要な場合が多い
3. 下部の TestMe Footer.java の内容は不要
4. @Mock と @InjectMock の間に空白行がない
Junit4&mockito のコピーを作成し(元のファイルは読み取り専用)、修正を加えます:
Junit4&mockito テンプレートのコピーを生成し、修正できます。
3: まとめ
単体テスト自動生成プラグインを柔軟に活用することで、大幅に時間を節約できます。
これら 2 つのプラグインをインストールして試してみて、自分の好みに最も合うものを選んでください。
また、好みに合わせてテンプレートを調整することもできます。
なお、プラグインに過度な期待は禁物です。生成された単体テストは、パラメータの修正やアサーションの追加など、多少なりとも手動での修正が必要です。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
