我们应该单独测试网络服务吗?

时间:2009-08-20 20:15:38

标签: web-services unit-testing

我们应该对web服务进行单元测试,还是真的要单独测试Web服务为我们调用的代码并单独保留Web服务,或者至少在集成测试之前等等......?

编辑:进一步澄清/思考

我的想法是测试Web服务真的是集成测试而不是单元测试吗?我问,因为我们此时(正在开发中)的Web服务是以这样的方式编码的,因此无法对它调用的代码进行单元测试。所以我想知道现在重构它是否值得/聪明,以便能够单独测试免费的Web服务代码?我想知道普遍的共识是,将两者分开是否很重要,或者是否可以对网络服务进行单元测试并将其称为良好/明智。

如果我把它们分开,我会试着测试两者,但我不确定分离是否值得。我的预感是我应该。

8 个答案:

答案 0 :(得分:11)

单元测试Web服务正在调用的代码绝对是个好主意,因为它可以确保代码的“内部”稳定(并且设计良好)。但是,测试Web服务调用也是一个好主意,特别是如果连续调用其中一些来完成某项任务。这将确保您提供的Web服务可以使用,并且在与其他Web服务调用一起调用时可以正常工作。 (不确定在编写代码之前或之后是否编写了这些测试,但是在实现实际调用之前,您应该考虑编写Web服务测试,以确保在编写代码之前可以使用它们。)

答案 1 :(得分:5)

为什么不两个都做?您可以对Web服务代码进行单元测试,也可以从Web服务客户端的角度对其进行单元测试。

答案 2 :(得分:2)

我们两个都做。

我们对各种代码元素进行单元测试。

另外,我们使用单元测试框架来对整个Web服务执行测试。这相当复杂,因为我们必须创建(并加载)数据库,启动服务器,然后对该服务器执行请求。

答案 3 :(得分:2)

根据我的概念,WS只是一个中央业务层对象方法的封装,换句话说,Web方法只是访问模型中更深层方法的“门户”。

前者说,我做两个操作:

  1. 在服务器内部,我创建了一个在业务层方法上进行负载测试的Winform应用程序。

  2. 在服务器外部(即Web应用程序所在的局域网之外的一台机器),我创建了一个消耗WS的测试程序(Winform或Web),以这种方式进行负载测试。

  3. 这样我可以评估和解决“Web效应”(即数据传播和到达WS的时间,WS对象创建等)我的解决方案的性能。

    以上所说的当然是恕我直言。至少那对我来说很有用!

    哈吉.-

答案 4 :(得分:1)

测试Web服务API很简单(它有一个API)并且很有价值。但这不是单元测试 - 它是“集成”,“子系统”或“系统”测试(取决于你问的对象)。

没有必要推迟测试,直到一些神奇的时期称为“集成测试”,现在只需进行一些简单的测试并尽早获得好处。

答案 5 :(得分:1)

如果可以,请尝试使用客户将使用的一些开发工具来使用您的Web服务(Delphi,C#,VB.Net,ColdFusion,手工制作的XML等等)。当然,在合理的范围内。

1)不同的工具可能在使用您的Web服务时遇到问题。在您的客户做之前,最好让您参与其中。

2)如果客户遇到问题,您可以轻松证明您的Web服务正在按预期工作。在过去一年左右的时间里,这已经停止了手指指向它的轨道至少十几次。

最糟糕的是,不同时区的开发人员正在手工制作用于SOAP调用的XML并解析响应。每当他遇到问题时,他都会坚持认为这是在我们的最后,并且(严肃地)要求我们证明不是这样。我制作了一个简单的Delphi应用程序来使用Web服务,证明这些方法按预期工作,甚至为每个请求和响应显示XML。

答案 6 :(得分:1)

我喜欢编写单元测试的想法,该单元测试通过一个的公共接口调用您的Web服务。例如,给定的WCF Web服务可以公开HTTP,TCP和“web”绑定。这样的单元测试证明可以通过 绑定来调用Web服务

集成测试将涉及测试服务的所有绑定,使用特定客户端方案和特定客户端工具进行测试。例如,显示可以使用可以在使用WS-Security时访问服务的IBM Rational Web Developer创建Java客户端非常重要。

答案 7 :(得分:0)

重新提问。

集成测试和单元测试只是表面上相似,所以是的,它们应该完成并单独考虑。

重构现有代码以使其可测试可能存在风险。由您来决定好处是否超过了它将花费的时间和精力。在我的情况下,我肯定会尝试,即使你一次只做一点。

从好的方面来说,Web服务具有已定义的界面,因此您无需更改任何内容即可添加集成测试。疯了。如果可以,请在将Web服务推送给客户之前尝试执行此操作。使用Web服务很可能会导致界面发生变化,而且您不希望这会给客户带来太多麻烦。