第一次海报和TDD采用者。 :-)我会有点冗长,所以请耐心等待。Webservices的端到端测试
我最近开始使用Apache CXF框架Spring和Commons Chain开发基于SOAP的Web服务来实现业务流。我在这里面临的问题是测试Web服务 - 像单元测试和功能测试一样进行测试。
我在单元测试中的第一次尝试是完全失败。为了保持单元测试的灵活性,我使用了一个Spring XML文件来保存测试数据。另外,我没有创建要测试的“组件”实例,而是从我的Spring应用程序上下文中检索它们。包含数据的XML文件很快就失控了;用XML创建对象图变成了一场噩梦。由于要测试的“组件”是从Spring应用程序上下文中选取的,因此每个测试运行都会加载我应用程序中涉及的组件,使用的DAO对象等。此外,与单元测试案例集中或专注于测试组件,单元测试开始触及数据库,与邮件服务器进行通信等。糟糕,非常糟糕。
我知道我做错了什么,并开始想办法纠正它。根据本主板的其中一篇帖子的建议,我查阅了Java嘲笑框架Mockito,以便我可以不使用真正的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映射在这里]并检索结果。
所以,现在的问题:
- 如何在DAO类ESP测试时,一个插入或更新用可能会留下一个“不稳定”状态的数据库[在情况下,假设3插入到不同的表实际上形成一个单一交易]?
- 功能测试Web服务的事实标准是什么,它围绕着大量数据移动,即从数据存储区无意识插入/检索?
您的个人经验/评论将不胜感激。请让我知道,以防我在解释手边的问题时遗漏了一些细节。
-sasuke
使用JaxWsServerFactoryBean的简单Junit规则:https:/ /github.com/skjolber/mockito-soap-cxf – ThomasRS 2016-11-24 12:56:01