比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

...

基本的な単体テストの実施」で 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.単体テストアシスタントビューの Image Addedをクリックします。

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

Image Added


・アサーション作成

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

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

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

Image Added

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

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

assertNotNull(result);

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

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

assertEquals(0, result.getPrice());

assertEquals(0, result.getCount());

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

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

Image Added

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