実践中の再構成17_表駆動法


コードと初期ユニットテストを参照してください。
http://zhang-xzhi-xjtu.iteye.com/blog/875986
テストの数が多いし、構造も似ているので、表駆動法を使うのもいい選択です。
/**
 *     。
 * */
public class TestUserQueryService2 {
	/**
	 *               。
	 * 
	 * <pre>
	 *    
	 *            ,     ,     ,       ,       ,
	 *       ,     ,        ,           ,           ,
	 *            ,           
	 * </pre>
	 * */
	private static List<String> testData;

	/**
	 *        。
	 * */
	static {

		testData = new ArrayList<String>();

		//      ,  
		testData.add("19820110,40,20,19820101,19820107,10,1,10,10,1,0,0");
		//      ,   
		testData.add("19820110,43,20,19820101,19820107,10,5,3,3,41,0,0");

		//      ,  
		testData.add("19810804,40,20,19820101,19820107,10,2,10,0,0,10,11");
		//      ,   
		testData.add("19810801,43,23,19820101,19820107,10,3,3,0,0,3,21");

		//   ,  
		testData.add("19820103,43,20,19820101,19820107,10,5,10,3,41,7,1");
		//   ,   
		testData.add("19820103,43,4,19820101,19820107,10,5,7,3,41,4,1");

		//      ,    
		testData.add("19820103,40,60,19820101,19820107,10,6,10,0,0,10,11");
		//      ,     
		testData.add("19820103,40,17,19820101,19820107,10,6,7,0,0,7,11");

		//      ,     
		testData.add("19820103,43,40,19820101,19820107,10,6,10,0,0,10,8");
		//      ,      
		testData.add("19820103,43,20,19820101,19820107,10,7,3,0,0,3,18");
	}

	/**
	 *   "yyyyMMdd"         。
	 * */
	private static Date parseDate(String dateStr) {
		Date date = null;
		try {
			DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
			date = dateFormat.parse(dateStr);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return date;
	}

	private UserQueryService queryService;
	private MockUserQueryManager mockUserQueryManager;

	/**
	 *        。
	 * */
	private void setUpEnv(String hisDate, int hisSize, int prodSize) {
		queryService = new UserQueryService();
		mockUserQueryManager = new MockUserQueryManager(parseDate(hisDate),
				hisSize, prodSize);
		queryService.setManager(mockUserQueryManager);
	}

	/**
	 *        。
	 * 
	 * @param userList
	 *                。
	 * @param size
	 *                 。
	 * @param hisSize
	 *                      。
	 * @param hisFrom
	 *                      index。
	 * @param prodSize
	 *                      。
	 * @param prodFrom
	 *                      index。
	 * 
	 * */
	public void assertUserList(List<User> userList, int size, int hisSize,
			int hisFrom, int prodSize, int prodFrom) {

		Assert.assertNotNull(userList);
		Assert.assertEquals(size, hisSize + prodSize);

		Assert.assertEquals(size, userList.size());

		for (int i = 0; i < hisSize; i++) {
			User user = userList.get(i);
			Assert.assertEquals("his_" + (hisFrom + i), user.getName());
		}

		for (int i = 0; i < prodSize; i++) {
			User user = userList.get(hisSize + i);
			Assert.assertEquals("prod_" + (prodFrom + i), user.getName());
		}
	}

	@Test
	public void testQuery() {
		for (String data : testData) {

			String[] parts = data.split(",");

			String hisDate = parts[0];
			int hisSize = Integer.valueOf(parts[1]);
			int prodSize = Integer.valueOf(parts[2]);
			setUpEnv(hisDate, hisSize, prodSize);

			String start = parts[3];
			String end = parts[4];
			int pageSize = Integer.valueOf(parts[5]);
			int pageNum = Integer.valueOf(parts[6]);
			List<User> userList = queryService.findUsers(parseDate(start),
					parseDate(end), pageSize, pageNum);

			int resultSize = Integer.valueOf(parts[7]);
			int resultHisSize = Integer.valueOf(parts[8]);
			int resultHisFrom = Integer.valueOf(parts[9]);
			int resultProdSize = Integer.valueOf(parts[10]);
			int resultProdFrom = Integer.valueOf(parts[11]);
			assertUserList(userList, resultSize, resultHisSize, resultHisFrom,
					resultProdSize, resultProdFrom);
		}
	}

}