テストのコンテキスト----テストケースの構造化(enclosed)

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));
        }
    }
}

テスト結果:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值