Java Servlet Web服务中的TDD

时间:2015-11-28 05:22:19

标签: web-services unit-testing servlets tdd integration-testing

我已经知道如何编写JUnit测试用例(也可以使用Mockito)。感谢网络上的简单教程。唯一的问题是,我找不到任何关于将其实施到实际或让我们说现实项目的例子。

我有一个使用Servlets的简单REST Web服务。它有一个API方法,可以将POST请求发送到另一个Web服务,然后将数据作为响应排列。

API请求由两层处理:

  • Servlet(Controller) - 验证请求参数
  • 服务 - POST请求发送者到另一个Web服务

这是服务方法的作用:

  1. 准备参数数据(此请求的参数中提供了一些属性,有些属性是从数据库中检索的)
  2. 向其他网络服务发送请求,该服务以QR码的图像网址进行响应
  3. 解码QRCode图像,然后使用解码文本
  4. 响应其请求

    这需要哪些单元测试案例?

    集成测试怎么样?我是否必须使用ServletUnit,或者我可以运行服务器并使用对正在运行的服务器的请求编写测试吗?

1 个答案:

答案 0 :(得分:0)

单元测试通常涉及单独测试单个类。因此,您需要测试servlet类和服务类。

如果您对servlet的单元测试感兴趣,请查看these answers。在您的情况下,您需要模拟任何外部依赖项并检查例如是否将有效参数发送到服务方法。

单元测试服务方法包括模拟所有外部依赖项(Web服务,数据库),并仅测试在方法中执行的逻辑(例如,数据准备正确,QR解码并使用正确的文本进行响应)。

大多数情况下,您最终编写集成测试,因为您有多个组件需要协同工作。有多种可能的解决方案可以解决这个问题。您可以创建一个单独的集成测试环境,尝试尽可能地复制您的生产环境(Web服务器,应用程序服务器,数据库)。对于可能工作量太大的小型项目,您可以使用某种内存数据库(例如H2)来启动嵌入式Tomcat。请记住,要使集成测试可重复,您可能必须为每次测试运行重新初始化数据库。

此外,您提到了一个Web服务,它使用QR码的URL进行响应。如果您无法控制该服务,我也会尝试模拟该服务。您不希望进行失败的集成测试,因为Web服务可能无法在100%的时间内使用。

由于您的Servlet充当RESTful Web服务,请查看rest-assured。这是用于测试REST服务的DSL。