`
zhang_xzhi_xjtu
  • 浏览: 524448 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

实践中的重构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);
		}
	}

}
分享到:
评论
1 楼 抛出异常的爱 2011-02-22  
DataMap dm = new DataMap("hissize=23","porsize=44"......);
自己实现一个DataMap放在测试的工具箱里很有用.

相关推荐

    3.领域驱动设计在系统重构中的应用实践.pdf

    领域驱动设计在系统重构中的应用实践

    领域驱动设计在重构业务系统中的实践.docx

    领域驱动设计在重构业务系统中的实践.docx

    领域驱动设计与模式实践.pdf

    领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中。大部分关于此主题的著作和文章都以Eric Evans的书《领域驱动设计》为基础,主要从概念和设计的角度探讨领域建模和设计情况。这些著作讨论实体...

    领域驱动设计在重构业务系统中的实践

    机缘巧合,不久前的工作内容中,需要把之前分散在若干个业务系统中(微服务)的购买相关功能进行梳理重构,在这个重构的过程中,充分运用了领域驱动设计中战略设计部分的思想,达成了目标。本文将结合一些文字和图片...

    最新领域驱动设计(DDD)资料合集(23份).zip

    最新领域驱动设计(DDD)资料合集,共23份。 金融支付系统的改造之路 ...DDD实践中的那些坑 DDD在旅游电商架构演进中的实践 Every Entity as A Microservice Praise for Implementing Domain-Driven Design

    测试驱动的嵌入式C语言开发_中英文合集

    第三部分介绍了设计与持续改进代码,如写出更好代码的一些重要原则,建立可测并灵活设计的高级技术,改进已有代码的实践方法—重构技术,改进遗留代码,以及编写和维护测试的指导原则。本书的代码几乎全部用C写成,...

    C#测试驱动开发

    在自己当前的开发实践中找出这些反面模式则更为重要。 第Ⅰ部分 入门 第1章 通向测试驱动开发之路 第2章 单元测试简介 第3章 重构速览 第4章 测试驱动开发:以测试为指南 第5章 模拟外部资源 第Ⅱ部分 将基础知识...

    领域驱动设计第二分卷

    5.6.3 在混合范式中使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的...

    领域驱动设计.软件核心复杂性应对之道-3

    本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了领域驱动设计在软件开发中的实际应用。 通过对本书的阅读,读者将获得对领域驱动设计的总体...

    领域驱动设计.软件核心复杂性应对之道

    本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的java示例,这些例子都是从实际中提取出来的,展示了领域驱动设计在软件开发中的实际应用。 通过对本书的阅读,读者将获得对领域驱动设计的总体...

    java测试驱动开发教程+代码实例

    《Java测试驱动开发》介绍如何将各种TDDzui佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是如何通过...

    测试驱动的c嵌入式开发

    《测试驱动的嵌入式C语言开发》深入介绍如何把测试驱动的开发方法应用于嵌入式C语言开发,第一部分介绍了两个开源的测试框架,通过测试驱动开发方法开发第一个模块:第二部分深入介绍了与系统中其他模块进行交互的...

    领域驱动设计第一分卷

    5.6.3 在混合范式中使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的...

    领域驱动设计(完美版)

    要通过创建领域模型来加速复杂的软件开发,就需要利用大量最佳实践和标准模式在开发团队中形成统一的交流语言;不仅重构代码,而且要重构代码底层的模型;同时采取反复迭代的敏捷开发方法,深入理解领域特点,促进...

    领域驱动设计 精简版

    要通过创建领域模型来加速复杂的软件开发,就需要利用大量最佳实践和标准模式在开发团队中形成统一的交流语言;不仅重构代码,而且要重构代码底层的模型;同时采取反复迭代的敏捷开发方法,深入理解领域特点,促进...

    领域驱动设计.软件核心复杂性应对之道-5

    本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了领域驱动设计在软件开发中的实际应用。 通过对本书的阅读,读者将获得对领域驱动设计的总体...

    《java测试驱动开发》 源码

    《java测试驱动开发》 源码 本书介绍如何将各种TDD最佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是...

    领域驱动设计.软件核心复杂性应对之道-2

    本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了领域驱动设计在软件开发中的实际应用。 通过对本书的阅读,读者将获得对领域驱动设计的总体...

Global site tag (gtag.js) - Google Analytics