嘲笑单元测试的重要部分?

时间:2012-10-19 15:47:26

标签: java web-services unit-testing jax-ws

我有一个调用第三方Web服务的Web服务。

现在我想对我的网络服务进行单元测试。为此,我应该模拟第三方Web服务还是在测试期间调用它?

是否有关于单元测试的标准文件?

4 个答案:

答案 0 :(得分:5)

是的,您应该模拟单元测试的第三方Web服务。以下是一些优点:

  1. 您的单元测试独立于其他组件,实际上只测试单元而不是Web服务。如果您在单元测试中包含该服务并且它们失败,您将无法知道问题是在您的代码中还是在外部Web服务中。

  2. 您的测试独立于环境。如果Internet连接断开或者您想要在完全没有Internet访问权限的计算机上进行测试,那么您的测试仍然有效。

  3. 您的测试将很多 更快,而无需实际连接到网络服务。这可能看起来不是什么大事,但如果你有很多测试(你应该这么做),它真的会让人讨厌。

  4. 您还可以让模拟发送意外的事情来测试您单位的健壮性。这可能总是发生在现实世界中,如果确实如此,您的Web服务应该做出很好的反应,而不仅仅是崩溃。使用真实的Web服务时无法测试它。

  5. 但是,还有集成测试。在那里,您测试完整的设置,所有组件放在一起(集成)。这是您使用真实Web服务而不是模拟的地方。

    这两种测试都很重要,但单元测试通常更早,更频繁地完成。它可以(并且应该)在创建系统的所有组件之前完成。集成测试需要在所有大多数组件中取得最小的进展。

答案 1 :(得分:1)

这取决于您单元测试的内容。

因此,如果您正在测试是否可以成功与第三方Web服务进行通信,那么您显然不会试图模仿它。但是,如果您对某些业务用例进行单元测试,这些业务用例属于您的Web服务产品(与其他模块/ Web服务正在进行的操作无关),那么您可能想要模拟第三方网络服务。

答案 2 :(得分:1)

您应该测试两者,但两个测试用例都不属于单元测试。

单元测试主要用于测试单个较小的片段,即类和方法。单元测试最好在构建过程中发生,无需任何人为干预。因此,作为单元测试的一部分,您应该模拟第三方Web服务。模拟的优点是,您可以使模拟对象以多种可能的方式运行,并测试您的类/方法,以确保它们处理所有可能的情况。

当涉及多个系统时,测试用例属于系统/集成/功能测试。因此,作为系统/集成/功能测试的一部分,您应该从Web服务调用其他Web服务中的方法,并确保一切按预期工作。

答案 3 :(得分:0)

模拟在具有相关组件的单元测试组件中通常是必不可少的。之所以如此,是因为在单元测试中,您只能测试您的代码是否正常工作(执行合同所说的那样)。如果这种方法,在试图完成其合同的一部分取决于其他组件正确地完成它们的部分时,完全可以模拟该部分(假设它们正常工作)。

如果你不嘲笑其他相关部分,你很快就会遇到问题。首先,您无法确定该组件所展示的行为。其次,您无法预测自己的测试结果(因为您不知道为测试提供的输入是什么)