2009-08-20 106 views
12

我们应该单元测试Web服务还是真的想单元测试Web服务为我们调用的代码,并让Web服务单独或至少直到集成测试等......?我们应该单元测试网络服务吗?

编辑:进一步澄清/想

我的想法是,测试Web服务是真正的集成测试没有单元测试?我问,因为我们现在的Web服务(正在开发)编码的方式是没有办法单元测试它所调用的代码。所以我想知道现在为了能够单元测试没有Web服务的代码而重构它是否值得。我想知道关于将这两者分开是非常重要的一般共识,还是单元测试Web服务并将其称为好/明智确实可行。

如果我将它们分开,我会考虑两种测试,但我不确定分离是否值得。我的直觉是我应该。

回答

11

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

5

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

+4

一样的答案,就像 – Perpetualcoder 2009-08-20 21:01:19

2

我们都这样做。

我们测试了各种代码元素。

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

+1

你滥用的术语“单元测试”的雅号1800信息。根据你的定义,一般的“自动化测试”和“单元测试”之间没有区别。 – 2009-08-21 09:00:59

+4

我不清楚“单位”。 “单元”是单个“文件”吗? “类”? “模块”? “包”?或“应用程序”? “单位”的唯一真实和不变的定义是哪一个?由于我们不明白为什么包“单元”测试与类“单元”测试不同,我们认为我们正在进行“单元”测试,并且我们肯定会使用单元测试框架,因为它非常有效。如果它让你开心,你也可以称之为“集成”测试。 – 2009-08-21 10:26:06

+1

缺少一个非常严格的标准并不意味着这种区分是无用的。 http://en.wikipedia.org/wiki/Continuum_fallacy – 2009-08-21 16:11:05

1

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

虽然不需要延迟测试,直到一些神奇的时期被称为“集成测试”,但现在只需进行一些简单的测试并尽早获得益处。

+1

真正的神奇时期。我用它作为对话片。我同意我们应该尽快测试。 :) – klabranche 2009-08-20 21:26:30

1

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

1)不同的工具可能会消耗您的Web服务的问题。在你的客户做这件事之前,最好先运行一下。

2)如果客户遇到问题,您可以轻松证明您的Web服务按预期工作。在过去的一年左右,这至少停止了十几次。

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

0

重新更新您的问题。

的集成测试和单元测试都只是表面上相似,所以是的,他们应该做的和独立的思想。

重构现有代码以使其可测试可能有风险。这取决于您是否获得的收益大于花费的时间和精力。就我而言,我一定会尝试,即使你一次做了一点。

在光明的一面,Web服务有一个定义的接口,所以你真的没有改变什么要补充的集成测试。疯了。如果可以,请在将Web服务推送给客户之前尝试执行此操作。使用Web服务很可能会导致界面发生变化,并且您不希望这会让客户陷入太多困境。

+0

我们正处于开发的最初阶段,所以我不担心重构风险。我提出了重构的想法,以便对它进行单元测试。至于具有定义的接口的Web服务,你不能拥有相同的库吗?我发现两者都具有改变界面的相同潜在风险,而且我也没有看到Web服务如何更好地受到保护,而不是像图书馆那样。 – klabranche 2009-08-20 21:41:16

+0

如果你非常小心永远不要改变你的库代码接口,那么他们会大致相同。根据我的经验,我发现许多发行版之间的代码库破坏,COM对象或Web服务的作者更可能单独离开现有接口并引入新接口。 – 2009-08-20 22:09:23

1

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

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

2

在我的概念中,WS仅仅是一个中央商务层对象的方法的一个单纯的封装,换句话说,Web方法只是一个“门”的接入方式在模型中更深。

对于前者说,我做两个操作:

  1. 在服务器内部,我创建了一个winform应用程序谁做负载测试对业务层的方法。

  2. 在服务器之外(即Web应用程序“存在”的LAN之外的机器),我创建了一个使用WS的Tester(Winform或Web),这样做负载测试。

这样我可以评价我的解决方案考虑并舍弃“网络效应”(即旅游,到达WS上,WS创建对象,等的时间数据)的性能。

所有上述说的当然是恕我直言。至少这对我有很大的帮助!

Haj.-