メタデータの末尾にスキップ
メタデータの先頭に移動

このページの古いバージョンを表示しています。現在のバージョンを表示します。

現在のバージョンとの相違点 View Version History

« 前のバージョン バージョン 6 次のバージョン »

単体テストアシスタントはテストケースの作成時にインタフェースや複雑なオブジェクトを自動的にモックオブジェクトに変更したテストケースを作成します。
テスト対象メソッドを様々な依存関係から切り離してテストを行うことができます。

自動ではなく、任意のインタフェースやメソッドをモック化する方法は任意のオブジェクトをモック化するテストメソッドを作成』を参照してください。

・テストメソッド作成

Cart#getItemDB メソッドをテストするメソッドを作成します。

1.ソースコードペインCart#getItemDB メソッドを開きます。

2.単体テストアシスタントビューで を押下します。

3.起動した画面で以下の設定を行います。※赤字が設定する値となります

 テストケースの追加: 通常

 初期化モード:深く

 モックの初期化:テスト メソッド内で設定

 作成されたテストの実行タイムアウト(ミリ秒)チェック無

 テストケースを作成するメソッド: Cart.getItemDB(Connection, String)

4.OK ボタンを押下します。

5.テストメソッドテンプレートは UTA プロジェクトの tests フォルダに作成されます。

基本的な単体テストの実施」で CartTest.java を既に作成している場合、同じクラスファイル内に testGetItemDB() メソッドが追加されます。
 また、テストメソッドとは別にモックを生成するためのヘルパーメソッド mockConnection(), mockResultSet(), mockStatement() が生成されます。

・テストメソッド確認

∘      TestGetItemDB() の確認

作成された testGetItemDB() を確認します。(テストメソッド名は連番で付けられるため本チュートリアルの実施順によって異なります。)

@Test

public void testGetItemDB() throws Exception {

テストメソッド
// Given
Cart underTest = new Cart();テストインスタンスの生成
// When
Connection con = mockConnection();getItemDBメソッドのConnection引数のモックオブジェクト呼び出し
String itemId = ""; // UTA: デフォルト値getItemDBメソッドのString引数
Item result = underTest.getItemDB(con, itemId);getItemDB メソッドの呼び出し


// Then

getItemDB の戻り値のチェック用アサーションテンプレート
// assertNotNull(result);
}

テンプレート作成時に getItemDB(Connection, String) メソッドの引数となるString オブジェクトにはデフォルト値 “” が格納されます。
同じく引数のConnection オブジェクトは同一テストクラス内に生成された Connection のモックを生成・設定するためのヘルパーメソッド mockConnection() の戻り値が格納されます。

∘      mockConnection() の確認

作成された mockConnection() を確認します(一部改行を入れています。)

private static Connection mockConnection()

throws Throwable {
ヘルパーメソッド
Connection con = mock(Connection.class);Connection のモックオブジェクト生成

Statement createStatementResult = mockStatement();

Statement のモックヘルパーメソッド呼び出し …①

when(con.createStatement()).

thenReturn(createStatementResult);
Connection#createStatement メソッドの戻り値を設定 …②
return con;Connectionを返却
}

テスト対象の getItemDB(Concection, String) メソッドの内部で Connection オブジェクトは Connection#createStatement メソッドで Statement オブジェクトの生成をします。
mockConnection() ヘルパーメソッドではテストケースの実行時に Connection#createStatement メソッドの戻り値が任意の値を戻すためのコードが自動生成されます。(上記②)
なお、Connection#createStatement メソッドの戻り値となる Statement はテストケースの生成で同時に生成された mockStatement() メソッドでモック化されています。(上記①)

∘      mockStatement() の確認

作成された mockStatement () を確認します。(一部改行を入れています。)

private static Statement mockStatement ()

ヘルパーメソッド
throws Throwable {
Statement createStatementResult = mock(Statement.class);ResultSetのモックヘルパーメソッド呼び出し …①

when(createStatementResult.
executeQuery(nullable(String.class))).

thenReturn(executeQueryResult);
Statement# executeQueryメソッドの戻り値を設定 …②

return createStatementResult;

Statementを返却
}

テスト対象の getItemDB(Concection, String) メソッドの内部で Statement オブジェクトは Statement#executeQuery() メソッドで ResultSet オブジェクトの生成をします。
mockStatement() ヘルパーメソッドではテストケースの実行時に Statement#executeQuery() メソッドの戻り値が任意の値を戻すためのコードが自動生成されます。(上記②)
なお、Statement#executeQuery() メソッドの戻り値となる Statement はテストケースの生成で同時に生成された mockResultSet() メソッドでモック化されています。(上記①)

∘      mockResultSet() の確認

作成された mockResultSet() を確認します。(一部改行を入れています。)

private static ResultSet mockResultSet () throws Throwable {

ヘルパーメソッド
ResultSet executeQueryResult = mock(ResultSet.class);ResultSetのモックオブジェクト生成

int getIntResult = 0; // UTA: デフォルト値when(executeQueryResult.getInt(nullable(String.class))).

thenReturn(getIntResult);
ResultSet#getIntメソッドの戻り値を設定

String getStringResult = ""; // UTA: デフォルト値
when(executeQueryResult.getString(nullable(String.class))).

thenReturn(getStringResult);
ResultSet#getString メソッドの戻り値を設定

boolean nextResult = false; // UTA: デフォルト値

when(executeQueryResult.next()).thenReturn(nextResult);
ResultSet#next メソッドの戻り値を設定
return executeQueryResult;ResultSetを返却
}

∘      テストメソッドの変更

作成されたテストメソッドはテストの内容に合わせて変更する必要があります。
今回は、mockResultSet() ResultSet#next メソッドの戻り値を変更します。
次のコードの falsetrue に変更します。

変更前
変更後
boolean nextResult = false;boolean nextResult = true;

変更後のファイルを保存し、プロジェクトのビルドが正常に行われることを確認します。

・テストメソッド実行

1.単体テストアシスタントビューの をクリックします。

2.実行後、単体テストアシスタントビューの ”実行フロー“ にはモックオブジェクトの作成とモックオブジェクトを利用している個所が表示されます。


・アサーション作成

ここまでに作成した testGetItemDB() メソッドにテストの成功可否を判断するためのアサーションメソッドを追加します。

1.推奨事項タブの アサーションをクリックします。

2.2つ表示される アサーションの作成案のうち戻り値のオブジェクト構成要素のデータをチェックするため以下の アサーション をクリックします。

3.testGetItemDB() メソッドに以下のアサーションが追加されたことを確認します。

// Then - メソッド getItemDB(Connection, String) の結果 のアサーション

assertNotNull(result);

assertEquals("", result.getName());

assertEquals("", result.getId());

assertEquals(0, result.getPrice());

assertEquals(0, result.getCount());

4.変更後の testGetItemDB() メソッドを から実行します。

5.実行後、カバレッジビューでCart#getItemDB の実行行を確認します。

カバレッジビュー上は Cart#getItemDB メソッドの 92 % が実行されていることがわかります。
ソースコードペインの横に表示される赤のライン情報から java.sql.SQLException が発生するパターンのテストが不足していることがわかります。
例外を発生させるテストの作成でテストの実行時に例外を発生させるテストを作成します


  • ラベルがありません