可以使用哪些技术使编写测试更有趣?

时间:2010-01-05 14:54:45

标签: unit-testing tdd

我必须承认,我经常努力练习测试驱动开发。尽管使用Ruby on Rails使得TDD变得非常简单,因为它已经被烘焙,但我觉得编写测试非常无聊!就像牙线一样;我知道我应该这样做,但努力鼓起热情。

  • 您使用哪些技巧使写作测试变得有趣?例如,我看到的一个提示是围绕测试夹具数据发明一个小故事,而不仅仅是使用无意义的无关数据。

7 个答案:

答案 0 :(得分:8)

如果您先编写测试,那么它们就是您编码的规范。

编写测试时必须完成所有的思考。 “应该它做什么?” “我怎么知道它已经完成了?” “它需要嘲笑哪些接口?”

此外,如果使用简单的命名约定(使用“shoulds”)构建测试,则可以更轻松地确定应该发生的事情。

有关此问题的一些想法,请参阅http://weblogs.asp.net/rosherove/archive/2005/04/03/TestNamingStandards.aspx

如果您最后编写测试,那么它们很无聊,因为您知道代码可以正常工作。

答案 1 :(得分:3)

写负面测试通常比“晴天”测试更有趣。通过所有创造性的方式思考你可以打破你的课程(传递null,值太大/小等)。

它不仅可以让你的大脑有一个不同的角度来咀嚼它也会让你的课程变得更健壮,因为人们称之为null,大数字等等。

答案 2 :(得分:2)

我担心这个听起来像代码味道

测试是否很无聊,因为它们非常重复?

测试是否多次覆盖相同的事物? (即测试用例不只是一次测试一件事,所以对同样的事情进行了大量的重复测试......?)

你可能会感到无聊,因为测试是在错误的抽象层次上编写的,或者它们会迫使你做很多不必要的繁忙工作。

听起来有些事情需要重构或至少是抽象的,以便每个测试都表达了与其他代码的新内容或不同之处。

如果许多测试看起来显而易见或乏味,那么您使用的抽象中就会缺少某些内容。

开始寻找你觉得无聊的测试模式或单调乏味看看是否有些事情无法完成 - 比如创建一个小小的测试框架来帮助使这些测试更容易编写

经过检查,您可能只需要删除一些冗余测试并清理命名 - 这样就可以清楚地了解您需要测试的内容以及您可以依赖于在测试套件中的其他位置进行测试的内容。

这完全取决于权衡。我认为值得重新评估您正在编写的各种测试,并了解可能存在哪些替代方案。

答案 3 :(得分:1)

如果你在编写测试时感到无聊,那么你就是在测试错误的东西。当一些事情失败,当我不理解某事或什么时候出现新事物时,我正在编写测试。这样,我的测试永远不会徒劳或遵守“100%代码覆盖”政策而且我从不厌倦。

答案 4 :(得分:1)

有一种情况认为,无聊并非完全不好。我会说它对你的常规代码比对你的测试代码更强,但它也可能适用于测试。

当你不知道你的代码在做什么,什么时候你不相信它,每次你运行它还是释放它时,兴奋就会出现 - 那个小家伙坐在你的肩膀上尖叫“不!”。当你在调试器中花费大量时间时;当你的代码太复杂,纠结和粗糙(不是很好的方式)和可怕的时候。

无聊可能与兴奋相反,从那种光中看,无聊是好的。一步之后,可预测步骤之后的可预测步骤,我们编写了简单可靠的工作代码。红 - 绿 - 重构。

简单可靠的工作代码是我可以热衷的事情。

答案 5 :(得分:0)

首先,我想编写生产代码,因此我努力首先编写测试:在没有失败测试的情况下编写任何代码行。这并不总是可行,但至少它迫使我编写测试。

然后我尝试使用边界测试,否定案例,错误的API使用(例如缺少或多次初始化调用)来破坏我编写的代码...

我也经常参加考试;最后“所有测试通过”的消息让我对目前所写的内容感到满意......当我发现(并修复)一个错误时,我也很高兴。

有时候,我很喜欢我用于测试的姓名和号码(出生日期,最喜欢的球员号码,电话号码......)。

答案 6 :(得分:0)

如果您正确使用TDD,那么您应该在编写代码之前编写测试。这应该是一个很好的测试,以确保您正在编写的代码工作,并应该是一个小的增量。

因此,它确实是发展的一部分。编写一个单元测试与编写实现代码所需的一个函数有什么不同?

说你发现写作考试很无聊,就像是说“我觉得写I / O很无聊......我能做些什么来让它更有趣吗?”或者“我觉得写作UI很无聊......”

嗯,实际上编写任何类型的代码都很无聊或有趣......但这更像是开发人员的功能而不是代码:)我的朋友被迫为公司编写代码,尽管他并不是真的一个程序员,他的评论是“我不知道你怎么能一整天都这样做!!!”

由于您是开发人员,我的感觉是您喜欢编写代码,因此真正的问题是您没有正确地关注TDD并使测试成为您开发的真正部分。尽管框架可能会尝试使其成为必要,但是您应该正确地遵循该过程(即首先编写测试)并将其与您的开发实际集成。

然后,它实际上是整个开发过程中一个微不足道的部分,比如检查代码,评论,格式化 - 所有这些都可能会让人感到“无聊”,但却是必要的。它不会打扰我们,因为它只是开发的一部分,我们发现开发很有趣。