比較バージョン

キー

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

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

...

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

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

    Image Modified

...


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

...


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

...


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

...

  1. 初期化モード:深く

...

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

...

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

...

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

    Image Modified

...


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

...


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

    Image Modified

・テストメソッド確認

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

    コード ブロック
    themeEclipse
    @Test
    public void testGetItemDB() throws Exception {  // テストメソッド
    	// Given
    	Cart underTest = new Cart();  // テストインスタンスの生成
    
    	// When
    	// getItemDBメソッドのConnection引数のモックオブジェクト呼び出し
    	Connection con = mockConnection();		// getItemDBメソッドのConnection引数のモックオブジェクト呼び出し
    
    	// getItemDBメソッドのString引数
    	String itemId = ""; // UTA: デフォルト値
    	Item result = underTest.getItemDB(con, itemId);		// getItemDB メソッドの呼び出し
    
    	// Then
    	// assertNotNull(result);		// getItemDB の戻り値のチェック用アサーションテンプレート
    }

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

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

    コード ブロック
    themeEclipse
    private static Connection mockConnection() 		// ヘルパーメソッド
    		throws Throwable {
    	// Connection のモックオブジェクト生成
    	Connection con = mock(Connection.class);	
    
    	// Statement Connectionのモックヘルパーメソッド呼び出し のモックオブジェクト生成…①	
    	Statement createStatementResult = mockStatement();	
    
    	// StatementConnection#createStatement のモックヘルパーメソッド呼び出しメソッドの戻り値を設定 …①…②	
    	when(con.createStatement()).							// Connection#createStatement メソッドの戻り値を設定 …②
    		thenReturn(createStatementResult);
    	return con;		// onnectionを返却
    }

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


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

    コード ブロック
    themeEclipse
    private static Statement mockStatement () 		// ヘルパーメソッド
    		throws Throwable {
    	// Statementのモックオブジェクト生成
    	Statement createStatementResult = mock(Statement.class);	
    
    	// ResultSetのモックヘルパーメソッド呼び出し Statementのモックオブジェクト生成…①		
    	ResultSet executeQueryResult = mockResultSet();	
    
    	// Statement# ResultSetのモックヘルパーメソッド呼び出しexecuteQueryメソッドの戻り値を設定 …①…②	
    	when(createStatementResult.			//
    Statement# executeQueryメソッドの戻り値を設定 …②
    		executeQuery(nullable(String.class))).
    		thenReturn(executeQueryResult);
    	return createStatementResult;		// Statementを返却
    }

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


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

    コード ブロック
    themeEclipse
    private static ResultSet mockResultSet () throws Throwable {		// ヘルパーメソッド
    
    	// ResultSetのモックオブジェクト生成
    	ResultSet executeQueryResult = mock(ResultSet.class);		// ResultSetのモックオブジェクト生成
    	int getIntResult = 0; // UTA: デフォルト値
    
    	// ResultSet#getIntメソッドの戻り値を設定
    	when(executeQueryResult.getInt(nullable(String.class))).		// ResultSet#getIntメソッドの戻り値を設定
    		thenReturn(getIntResult);
    	String getStringResult = ""; // UTA: デフォルト値
    
    	// ResultSet#getString メソッドの戻り値を設定
    	when(executeQueryResult.getString(nullable(String.class))).		// ResultSet#getString メソッドの戻り値を設定
    		thenReturn(getStringResult);
    
    	// ResultSet#next メソッドの戻り値を設定
    	boolean nextResult = false; // UTA: デフォルト値		// ResultSet#next メソッドの戻り値を設定
    	when(executeQueryResult.next()).thenReturn(nextResult);
    	return executeQueryResult;			// ResultSetを返却
    }

    テスト対象の getItemDB(Concection, String) メソッドの内部で ResultSetオブジェクトは Statement#getInt メソッド、Statement#getString メソッド、ResultSet#next メソッドの呼び出しを行います。
    mockResultSet() ヘルパーメソッドではテストケースの実行時に それぞれのメソッドの戻り値が任意の値を戻すためのコードが自動生成されます。


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

    コード ブロック
    themeEclipse
    変更前									変更後
    boolean nextResult = false;		⇒		boolean nextResult = true;

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

...

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

・アサーション作成

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

...