【发布时间】:2010-10-23 04:45:01
【问题描述】:
第一次海报和 TDD 采用者。 :-) 我会有点冗长,所以请多多包涵。
我最近开始使用 Apache CXF 框架、Spring 和 Commons Chain 开发基于 SOAP 的 Web 服务,以实现业务流程。我在这里面临的问题是测试 Web 服务——在单元测试和功能测试中进行测试。
我的第一次单元测试尝试完全失败。为了保持单元测试的灵活性,我使用了一个 Spring XML 文件来保存我的测试数据。此外,我没有创建要测试的“组件”实例,而是从我的 Spring 应用程序上下文中检索它们。包含数据的 XML 文件很快就失控了;在 XML 中创建对象图被证明是一场噩梦。由于要测试的“组件”是从 Spring 应用程序上下文中挑选出来的,因此每次测试运行都会加载 所有 我的应用程序中涉及的组件、使用的 DAO 对象等。此外,与单元的概念相反测试用例集中或集中在仅测试组件上,我的单元测试开始访问数据库,与邮件服务器通信等。糟糕,非常糟糕。
我知道我做错了什么,并开始想办法纠正它。根据这个板上的一篇帖子的建议,我查找了 Mockito,这是一个 Java 模拟框架,这样我就可以不用使用真正的 DAO 类和邮件服务器,而只是模拟功能。
随着单元测试的控制,这给我带来了第二个问题;对数据的依赖。我一直在开发的 Web 服务几乎没有逻辑,但严重依赖数据。例如,考虑我的一个组件:
public class PaymentScheduleRetrievalComponent implements Command {
public boolean execute(Context ctx) {
Policy policy = (Policy)ctx.get("POLICY");
List<PaymentSchedule> list = billingDAO.getPaymentStatementForPolicy(policy);
ctx.put("PAYMENT_SCHEDULE_LIST", list);
return false;
}
}
我的大部分组件都遵循相同的路线——从上下文中选择一个域对象,点击 DAO [我们在这里使用 iBatis 作为 SQL 映射器]并检索结果。
那么,现在的问题是:
- 当单个插入或更新可能使数据库处于“不稳定”状态[假设 3 次插入不同表实际上形成单个事务] 时,如何测试 DAO 类?
- 移动大量数据的功能测试 Web 服务的实际标准是什么,即从数据存储中进行无意识的插入/检索?
您的个人经历/cmets 将不胜感激。如果我在解释手头的问题时遗漏了一些细节,请告诉我。
-佐助
【问题讨论】: