标签: testdrivendesign

单元测试或功能测试?

我最近听说过单元测试的功能测试.

我知道单元测试从最原子的形式测试给定代码片段的每种可能性.但功能测试怎么样?

这听起来像只测试代码是否有效,但它是否像单元测试一样可靠?

我被告知有两个关于这个问题的学校.某些人更喜欢单元测试,其他人更喜欢功能测试.

有没有什么好的资源,链接,书籍,任何参考文献或者你们中的任何一个能够解释和完善我的主题的人?

谢谢!

.net unit-testing functional-testing testdrivendesign

27
推荐指数
4
解决办法
5803
查看次数

TDD - 初学者问题和绊脚石

虽然我已经为大部分代码编写了单元测试,但我最近才拿到了Kent Beck的TDD副本.我一直对我做出的某些设计决定表示遗憾,因为它们阻止了应用程序的"可测试性".我读完了这本书,虽然其中一些看起来很陌生,但我觉得我可以管理它并决定在我当前的项目上试用它,这个基本上是一个客户端/服务器系统,两个部分通过它进行通信.USB.一个在小工具上,另一个在主机上.该应用程序是在Python中.

我开始了,很快就纠缠在一堆重写和小测试中,我后来认为它没有真正测试任何东西.我扔掉了大部分,现在有一个工作应用程序,测试已经凝结成只有2.

根据我的经验,我有几个问题,我想问一下.我从新到TDD获得了一些信息:是否有示例应用程序进行测试以显示如何进行TDD?但有一些我想要回答/讨论的具体问题.

  1. Kent Beck使用他添加的列表并从中指出开发过程.你怎么做这样的清单?我最初有一些项目,如"服务器应该启动","服务器应该中止,如果渠道不可用"等但他们混合,最后现在,它只是"客户端应该能够连接到服务器"(其中包含服务器启动等).
  2. 你如何处理重写?我最初选择了基于命名管道的半双工系统,这样我就可以在自己的机器上开发应用程序逻辑,然后再添加USB通信部分.它们被移动成为基于套接字的东西,然后从使用原始套接字转移到使用Python SocketServer模块.每当事情发生变化时,我发现我必须重写相当多的部分测试,这很烦人.我认为在我的开发过程中测试将是一个有点不变的指导.他们感觉更像是要处理的代码.
  3. 我需要一个客户端和一个服务器通过该通道进行通信以测试任何一方.我可以嘲笑其中一方来测试另一方但是整个频道都不会被测试,我担心我会想念它.这减少了整个红/绿/重构节奏.这只是缺乏经验还是我做错了什么?
  4. "伪造它直到你制造它"给我留下了许多混乱的代码,我后来花了很多时间来重构和清理.这是事情的运作方式吗?
  5. 在会话结束时,我现在让我的客户端和服务器运行大约3或4个单元测试.我花了大约一个星期的时间来做这件事.如果我在代码方式之后使用单元测试,我想我可以在一天内完成它.我没有看到收益.

我正在寻找那些使用这种方法完全(或几乎完全)实施大型非平凡项目的人的意见和建议.我已经运行的东西想要添加一个新功能对我来说是有意义的,但是从头做起它似乎很烦人而且不值得努力.

PS:如果这应该是社区wiki,请告诉我,我会这样标记.

更新0:所有答案都同样有用.我选了一个我做的,因为它最能引起我的经历.

更新1:实践练习练习!

python tdd testdrivendesign

23
推荐指数
2
解决办法
1934
查看次数

嘲弄的目的

嘲笑的目的是什么?

我一直在关注一些使用NUnit进行测试和使用Moq进行模拟的ASP.NET MVC教程.虽然我对它的嘲弄部分有点不清楚.

tdd unit-testing moq mocking testdrivendesign

6
推荐指数
2
解决办法
3110
查看次数

关于测试驱动开发的一些困惑

根据维基百科以下是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原则,我们首先编写测试然后编写开发代码,那么我们将在这里编写什么代码?

testing tdd unit-testing testdrivendesign

1
推荐指数
1
解决办法
100
查看次数