2011-08-19 106 views
1

我已经继承了一个项目,该项目将通过另一个开发人员编写的SOAP服务连接到CRM系统。我的问题是:我应该用什么级别测试与Soap服务的接口?测试API时 - 我应该测试API方法验证吗?

我设置了一个测试用例,并编写了一些方法来测试Soap更新方法,并通过合适的错误代码来确认失败的客户或订单号。

我接下来测试了一个无效的订单状态值(不在一组期望的参数中),并且服务返回了一个不成功的代码。

我相信我应该向开发人员报告,但现在我应该从测试套件中删除这个测试吗?或者让它表现为失败?

如果soap服务选择不验证其输入参数我认为这是一个糟糕的设计,但它不是我的代码中的错误,我只需要确保在将值传递给其他系统之前清理输入,并且无论如何,验证应该覆盖另一组测试。

我是否应该首先通过单元测试与SOAP服务进行交流?

回答

0

如果库(或第三方代码)具有良好的声誉(例如,Apache Commons,Guava ...),则不会重新测试该API。但是,当我不确定代码的质量时,我倾向于编写几个测试来验证我对库/ API的假设(但我不重新测试所有库)。

如果这些简单的假设失败,这对我来说是一个非常糟糕的迹象。在这种情况下,我倾向于编写更多测试来检查库的更多方面。在你的情况下,我会写更多的测试和向开发者发出错误信号。

这些测试不会丢失,因为如果提供了新版本的库,您仍然可以使用它们来检查回归。

+0

谢谢 - 因此,如果没有对实际API进行专门的单元测试,您应该保留此特定测试(不应在预期集合中的参数应该被拒绝),直到其他开发人员修复其代码? –

+0

@ user903182是的。在Java中,可以使用@ Ignore注释测试。汇编只是跳过它们。您可以稍后在交付新版本库时重新激活它们。事实上,你甚至可以将这些测试发送给开发人员。他/她应该将它们包含在他/她自己的测试集中。 – JVerstry

1

您应该为每个原子功能要求编写至少一个测试。现在,如果您使用最少的接口指南编写代码,那么每个原子功能需求最多只能有一个接口。但是你可以为每个需求编写多个测试,因为可能有多种可以测试的不变量。

一般来说,编写测试时应考虑不变量和功能要求,而不是接口方法。测试> =原子功能要求。

1

想想服务“契约”,先决条件(即合法输入)是什么,它是后置条件(即合法输出)和不变量(合法服务状态)。如果开发人员不清楚这些信息,或者有其他开发人员滥用该服务的可能性,则应该对其进行报告和处理。

虽然有一个例外 - 理论上这些都很好,但如果没有其他客户服务(除了最初的开发人员),有时候多余的检查已经过时。假设在这种情况下,通过客户代码检查并消除无效输入是非常合理的。