Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用单元测试作为;功能性合同“;_Unit Testing_Deployment - Fatal编程技术网

Unit testing 使用单元测试作为;功能性合同“;

Unit testing 使用单元测试作为;功能性合同“;,unit-testing,deployment,Unit Testing,Deployment,单元测试通常与软件版本一起部署,以验证安装,即进行安装、运行测试,如果测试通过,则安装良好 我即将开始一个项目,该项目将涉及向客户交付原型软件库版本。单元测试将作为每个版本的一部分交付,除了使用测试来验证安装之外,我计划使用测试API的单元测试作为如何使用该版本的“合同”。如果用户使用版本的方式与单元测试使用版本的方式类似,那就太好了。如果他们以其他方式使用它,那么所有的赌注都是无效的 以前有人试过吗?你有没有想过这是个好主意还是个坏主意 编辑:为了突出ChrisA和Dan在下面的回复中提出的一

单元测试通常与软件版本一起部署,以验证安装,即进行安装、运行测试,如果测试通过,则安装良好

我即将开始一个项目,该项目将涉及向客户交付原型软件库版本。单元测试将作为每个版本的一部分交付,除了使用测试来验证安装之外,我计划使用测试API的单元测试作为如何使用该版本的“合同”。如果用户使用版本的方式与单元测试使用版本的方式类似,那就太好了。如果他们以其他方式使用它,那么所有的赌注都是无效的

以前有人试过吗?你有没有想过这是个好主意还是个坏主意


编辑:为了突出ChrisA和Dan在下面的回复中提出的一个好观点,“测试API的单元测试”最好称为集成测试,其目的是从客户的角度演示API和软件的功能

听起来是个好主意。我(我们大家?)经常在内部使用单元测试来实现这一点。在使用我的单元测试来验证我没有破坏任何东西的过程中,我还隐式地验证了我的API契约没有改变。以您所说的方式部署单元测试似乎是一种自然的用法。

敏捷方法论说:测试是规范,所以这是一个非常好的想法。

这实际上是一个非常好的想法,作为API用户非常愉快


这种技术实际上也可以反过来使用:当您使用“遗留”API时,您可以使用单元测试来记录您认为该API的行为方式,并验证它是否真的按计划运行。

我完全希望为此受到谴责,但我不明白一组单元测试如何证明客户关心的事情,即应用程序是否满足其业务需求

这里有一个例子:我刚刚完成了一段代码的转换,以修复我们犯下的一个大错误。这是一个典型的过度工程的例子,这些变化已经影响了十几个windows窗体和大约同样多的类

这花了我几天的时间,现在简单多了,我们免费获得了一些特性,我们丢失了大量代码,这些代码做了我们现在知道从未真正需要的东西

这些表格中的每一张以前都工作得很好。公共方法做了它们需要做的事情,底层数据访问也很好

所以任何单元测试都会通过

遗憾的是,他们做了错事——我们没有意识到,只是回顾过去。这就好像我们已经建立了一个原型,只有在尝试使用它之后,才意识到它是不对的

现在我们有了一个更精简、更吝啬、更适合的应用程序

但是错误的地方,在单元测试无法揭示的程度上是错误的,所以我只是不理解在安装时发布一组单元测试除了给人一种错误的安全感之外,还能做什么


也许我不了解一些东西,但在我看来,除非所提供的东西与所提供的测试具有相同的功能级别,否则它们证明不了什么。

如果您有兴趣在代码中提供一组规范,也许您应该研究一些行为驱动的开发工具(nbehave、jbehave、rspec等)。这些框架支持用给定的/when/then语法描述测试,并输出自然语言的格式化结果。有关.NET BDD工具的示例,请参阅。您可以找到BDD的优秀描述

另一种选择是,您可以使用验收测试框架(如or(或仅限java)编写测试,并将这些验收测试与代码一起交付。fit/fitnesse和concordion都允许在纯HTML甚至Word文档中指定测试


这两种方法(BDD或验收测试框架)的好处是,用户看到的结果更易于理解。

如果您正在发布一个代码库,这听起来很棒


如果您发布的是一个普通的软件产品,您的用户只能通过GUI进行交互,那么您的单元测试可能无法在相同的抽象级别上工作,或者可能不是评估产品行为的最有用的工具。一个真正好的用户手册(是的,这是可能的)这可能更好。

测试将检查需求

需求定义功能

=>测试将检查功能

问题是,只有单元测试可以覆盖的功能才能被检查。集成或整个系统测试将不起作用


否则,TDD的主要方法就是通过单元测试来检查功能。

称之为“作为文档的测试”

您在这里描述的是集成测试,而不是单元测试。嘿,看看我下面的帖子……我用了50倍的词说了这句话;)完全同意-在上面添加了一个注释以突出您的观点。这是一个常见的问题,低级别单元测试被认为是所有功能测试的终点。您是否考虑rspec(针对您正在开发的内容的单元测试),而不是rubyspec(针对整个编程语言的测试)?