java - Web 服务的端到端测试

标签 java testing service

首次发布者和 TDD 采纳者。 :-) 我会有点冗长,所以请多多包涵。

我最近开始使用 Apache CXF 框架、Spring 和 Commons Chain 开发基于 SOAP 的网络服务来实现业务流程。我在这里面临的问题是测试 Web 服务——在单元测试和功能测试中进行测试。

我的第一次单元测试尝试完全失败了。为了保持单元测试的灵 active ,我使用了一个 Spring XML 文件来保存我的测试数据。另外,我没有创建要测试的“组件”实例,而是从我的 Spring 应用程序上下文中检索它们。包含数据的 XML 文件很快就失控了;用 XML 创建对象图被证明是一场噩梦。由于要测试的“组件”是从 Spring Application Context 中挑选出来的,因此每次测试运行都会加载所有我的应用程序中涉及的组件、使用的 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 类(尤其是在假设 3 次插入不同表实际上形成单个事务的情况下)?
- 移动大量数据(即从数据存储中无意识地插入/检索)的功能测试 Web 服务的实际标准是什么?

您的个人经历/评论将不胜感激。如果我在解释手头的问题时遗漏了一些细节,请告诉我。

-佐助

最佳答案

如果我是你,我会远离“上下文作为全局 HashMap ”“模式”。

看起来您正在测试持久性映射...

您可能想看看:testing persistent objects without spring

关于java - Web 服务的端到端测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812685/

相关文章:

java - 将 #text 从 getNodeName 转换为字符串

java - 如何构建 Sparql 查询来获取带空格的字符串

c# - 我可以以编程方式启动 "services.msc"并将用户集中在确切的服务上吗?

unix - 从 C/C++ 应用程序启动 systemd 服务或调用 D-Bus 服务

java - HttpResponse 正文正在更改

java - 通过java检查我的服务器是否启动

ruby-on-rails - rspec 测试未通过。使用动态数据

testing - Botium 信息可用,但设置 Botium 的 alexa 技能起点的快乐路径是什么

Flash 运行时性能测试

android - 即使我强制停止应用程序,whatsapp 服务如何重新启动?