Seasarプロジェクトで単体テストを実施する方法[中級編]

前回は、「S2JUnit4」の基本的な使い方を学ぶため、テスト対象メソッドが文字列を返す単純なものでした。
しかし、実際にはプリミティブな値を返すより、DTO(Data Transfer Object)やDTOのリストを返すケースの方が多いと思われる。
今回は、DTODTOのリストを返すメソッドの実行結果と期待値を比較する方法を紹介する。

S2JUnit4」には、期待値のデータをExcelから取得する機能が提供されている。この機能を利用してテストを実施する。<テスト実施方法概要>
1.テスト対象クラス用のテストクラスを作成する
2.期待値Excelデータを作成する
3.テストクラスにテストロジックを記述する
4.テストを実行する<テスト実施方法詳細>

[前提]
下記のクラスをテスト対象として記述している。

package jp.co.smp.ut.service;

import java.util.ArrayList;
import java.util.List;

import jp.co.smp.ut.dto.SampleDto;

public class SampleDtoService {

	//DTOを返却するメソッド
	public SampleDto sampleDtoMethod(){
		
		SampleDto dto = new SampleDto();
		dto.id = "ID123";
		dto.name = "TEST_NAME";
		dto.year = 20;
		dto.gender = 1;
		
		return dto;
	}
	
	//DTOのリストを返却するメソッド
	public List<SampleDto> sampleDtoListMethod(){
		
		List<SampleDto> dtoList = new ArrayList<SampleDto>();
		
		for(int i=0; i<10; i++){
			
			SampleDto dto = new SampleDto();
			dto.id = "ID10" + i;
			dto.name = "TEST_NAME_LIST" + i;
			dto.year = i;
			dto.gender = i%2;
			
			dtoList.add(dto);
		}
		
		return dtoList;
	}
}

DTOの定義

package jp.co.smp.ut.dto;

public class SampleDto {	
	public String id;
	public String name;
	public int year;
	public int gender;
}


1.テスト対象クラス用のテストクラスを作成する
前回と同じなので割愛する。

2.期待値Excelデータを作成する
1行目にDTO内の変数名を記述し、2行目以降から期待するデータを記述したExcelファイル(.xls)を作成する。
ファイル名は任意でよい。また、DTO内に定義されていても、比較対象にする必要がない変数に関しては記述する必要はない。

expectation_sampleDtoMethod.xls (メソッド「sampleDtoMethod」用の期待値データ)

expectation_sampleDtoListMethod.xls (メソッド「sampleDtoListMethod」用の期待値データ)

これらのExcelファイルをテストクラスを同じパッケージ内に配置する。


3.テストクラスにテストロジックを記述する
テストロジックの流れは、「テスト対象のメソッドを実行する」→「期待値データを取得する」→「実行結果と期待値データを比較する」となる。
Excelデータは、「DataAccessor#readXls」で取得することができる。
また、実行結果がDTOの場合は、「S2Assert#assertBeanEquals」でデータの比較を行い、実行結果がDTOのリストの場合は、「S2Assert#assertEquals」で比較を行う。

package jp.co.smp.ut.service;

import java.util.List;

import jp.co.smp.ut.dto.SampleDto;

import org.junit.runner.RunWith;
import org.seasar.extension.dataset.DataSet;
import org.seasar.framework.unit.DataAccessor;
import org.seasar.framework.unit.S2Assert;
import org.seasar.framework.unit.Seasar2;

@RunWith(Seasar2.class)
public class SampleDtoServiceTest {

	private SampleDtoService sampleDtoService;
	
	private DataAccessor accessor;

	public void testSampleDtoMethod() {
		
		//テスト対象のメソッドを実行する
		SampleDto resultDto = sampleDtoService.sampleDtoMethod();
		
		//期待値Excelのデータを取得
		DataSet expectationDataSet = accessor.readXls("expectation_sampleDtoMethod.xls");
				
		//実行結果と期待値データを比較
		S2Assert.assertBeanEquals(expectationDataSet, resultDto);
		
	}

	public void testSampleDtoListMethod() {
		
		//テスト対象のメソッドを実行する
		List<SampleDto> resultList = sampleDtoService.sampleDtoListMethod();
		
		//期待値Excelのデータを取得
		DataSet expectationDataSet = accessor.readXls("expectation_sampleDtoListMethod.xls");
				
		//実行結果と期待値データを比較
		S2Assert.assertEquals(expectationDataSet, resultList);
		
	}

}


4.テストを実行する
実行方法は、前回と同じなので割愛する。

実行結果


お勧め書籍