1.テストケースをグループ化する
- テストケースで検証する操作単位でグループ化する
- テストケースを共通の初期化処理を含むものでグループ化する
例えば、商品のストックを管理するItemStockインタフェースに対するテストコードを整理することを考えます。
ItemStockインタフェース:
public interface ItemStock {
/**
* 商品と数量を指定して追加する
* @param item 商品名
* @param num 追加する数量
*/
void add(String item,int num);
/**
* 商品を指定して、商品の在庫数を返す
* @param item 商品名
* @return 在庫数、登録されていない場合は0
*/
int size(String item);
/**
* 商品の在庫が残っている場合にtrueを返す
* @param item 商品名
* @return 在庫が1以上の場合にtrue
*/
boolean contains(String item);
}
このインタフェースに対するテストケースを、次のように抽出したとします。
- ItemStockが初期状態のとき、sizeに商品Aを指定すると0を返す
- ItemStockが初期状態のとき、containsに商品Aを指定するとfalseを返す
- ItemStockが初期状態のとき、addで商品Aを2を追加すると商品Aのsizeが1を返す
- ItemStockに商品Aが2個含まれるとき、sizeに商品Aを指定すると2を返す
- ItemStockに商品Aが2個含まれるとき、containsに商品Aを指定するとtrueを返す
- temStockに商品Aが2個含まれるとき、addで商品Aを3追加すると商品Aのsizeが5を返す
ItemStockImpl class:
import java.util.HashMap;
public class ItemStockImpl implements ItemStock{
HashMap<String,Integer> map = new HashMap<String,Integer>();
public ItemStockImpl(String item,int num){
map.put(item, num);
}
@Override
public void add(String item, int num) {
// TODO Auto-generated method stub
int temp = map.get(item);
map.put(item, num+temp);
}
@Override
public int size(String item) {
// TODO Auto-generated method stub
return map.get(item);
}
@Override
public boolean contains(String item) {
// TODO Auto-generated method stub
if(map.get(item) > 0){
return true;
}else{
return false;
}
}
}
構造化されたItemStockのテストクラス
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class ItemStockTest {
public static class 空の場合{
ItemStock sut;
@Before
public void setUp() throws Exception{
sut = new ItemStockImpl("A",0);
sut.add("A", 0);
}
@Test
public void size_Aが0を返す() throws Exception{
assertThat(sut.size("A"),is(0));
}
@Test
public void contains_Aはtrueを返す() throws Exception{
assertThat(sut.contains("A"),is(false));
}
}
public static class 商品Aを2件含む場合{
ItemStock sut;
@Before
public void setUp() throws Exception{
sut = new ItemStockImpl("A",0);
sut.add("A", 2);
}
@Test
public void sizeが2件を返す() throws Exception{
assertThat(sut.size("A"),is(2));
}
@Test
public void contains_Aはtrueを返す() throws Exception{
assertThat(sut.contains("A"),is(true));
}
}
}
テスト結果: