我最近听说过单元测试的功能测试.
我知道单元测试从最原子的形式测试给定代码片段的每种可能性.但功能测试怎么样?
这听起来像只测试代码是否有效,但它是否像单元测试一样可靠?
我被告知有两个关于这个问题的学校.某些人更喜欢单元测试,其他人更喜欢功能测试.
有没有什么好的资源,链接,书籍,任何参考文献或者你们中的任何一个能够解释和完善我的主题的人?
谢谢!
虽然我已经为大部分代码编写了单元测试,但我最近才拿到了Kent Beck的TDD副本.我一直对我做出的某些设计决定表示遗憾,因为它们阻止了应用程序的"可测试性".我读完了这本书,虽然其中一些看起来很陌生,但我觉得我可以管理它并决定在我当前的项目上试用它,这个基本上是一个客户端/服务器系统,两个部分通过它进行通信.USB.一个在小工具上,另一个在主机上.该应用程序是在Python中.
我开始了,很快就纠缠在一堆重写和小测试中,我后来认为它没有真正测试任何东西.我扔掉了大部分,现在有一个工作应用程序,测试已经凝结成只有2.
根据我的经验,我有几个问题,我想问一下.我从新到TDD获得了一些信息:是否有示例应用程序进行测试以显示如何进行TDD?但有一些我想要回答/讨论的具体问题.
我正在寻找那些使用这种方法完全(或几乎完全)实施大型非平凡项目的人的意见和建议.在我已经运行的东西后想要添加一个新功能对我来说是有意义的,但是从头做起它似乎很烦人而且不值得努力.
PS:如果这应该是社区wiki,请告诉我,我会这样标记.
更新0:所有答案都同样有用.我选了一个我做的,因为它最能引起我的经历.
更新1:实践练习练习!
嘲笑的目的是什么?
我一直在关注一些使用NUnit进行测试和使用Moq进行模拟的ASP.NET MVC教程.虽然我对它的嘲弄部分有点不清楚.
根据维基百科以下是TDD中的步骤:
第1步:编写单元测试
第2步:运行单元测试
第3步:为模块编写代码
第4步:再次运行所有测试
第5步:清理代码
第6步:重复这些步骤
问题1:在TDD中我们主要编写单元测试.集成测试和系统测试在上述步骤中的适用范围是什么?
请考虑以下示例:
假设我们有一个我们必须开发的功能.然后根据TDD,我们将在短迭代中开发此功能.假设我们已将此功能划分为2个模块 - 模块1和模块2.我正在编写迭代步骤,根据上述步骤在TDD中开发这些模块.(问题2)请在以下步骤中纠正我错误的地方:
**迭代1:**
第1步:我们为模块1编写单元测试.
第2步:为模块1运行此单元测试(此测试将失败)
第3步:为模块1开发代码.
步骤4:再次运行模块1的单元测试(此测试将通过)
**迭代2:**
步骤1:为模块2编写单元测试
第2步:运行模块2的单元测试
第3步:为模块2编写代码
步骤4:运行模块1的单元测试和模块2的单元测试.(问题3:在这一步中,为什么我们运行模块1的单元测试,因为模块2正在测试中?如果你说这样做是因为测试无论模块2是否没有破坏模块1的功能,那么我的问题是,这里我们只测试模块2.它还没有与模块1集成,那么它将如何打破模块1?)
**迭代3:**
第1步:创建集成测试(我在这里吗?)
第2步:运行集成测试(它们将失败,因为模块1和模块2尚未集成)
步骤3:集成模块1和模块2
第4步:运行所有测试(模块1,模块2和集成测试的单元测试)
(问题4:为什么在这一步中我们运行模块1和2的单元测试?)
迭代4(所有模块集成时):
第1步:创建系统测试
第2步:运行系统测试(它们将失败)
第3步:( 问题5 :)我应该在这里编写什么代码作为系统测试,我们不编写任何代码,根据TDD原则,我们首先编写测试然后编写开发代码,那么我们将在这里编写什么代码?