Unit testing 什么技巧可以使写作测试更有趣?

Unit testing 什么技巧可以使写作测试更有趣?,unit-testing,tdd,Unit Testing,Tdd,我必须承认,我经常努力实践测试驱动的开发。尽管使用RubyonRails使TDD变得非常简单,因为它是经过烘焙的,但我发现编写测试非常枯燥!就像用牙线洁牙;我知道我应该做这件事,但我很难鼓起足够的热情 你用什么技巧使写作测试变得有趣?例如,我看到的一个技巧是围绕测试夹具数据编造一个小故事,而不仅仅是使用无意义、无关的数据 如果您先编写测试,它们就是您的编码规范 所有的思考都必须在编写测试时完成。“它应该做什么?”“我怎么知道它完成了?”“它有哪些需要模拟的接口?” 此外,如果您使用一个简单的命

我必须承认,我经常努力实践测试驱动的开发。尽管使用RubyonRails使TDD变得非常简单,因为它是经过烘焙的,但我发现编写测试非常枯燥!就像用牙线洁牙;我知道我应该做这件事,但我很难鼓起足够的热情

  • 你用什么技巧使写作测试变得有趣?例如,我看到的一个技巧是围绕测试夹具数据编造一个小故事,而不仅仅是使用无意义、无关的数据

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

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

此外,如果您使用一个简单的命名约定(使用“shoulds”)来组织测试,您可以更容易地确定应该发生什么

请参阅以了解对此的一些想法


如果你最后一次写测试,它们会很无聊,因为你知道代码是有效的。

如果你在写测试时感到无聊,那么你测试的东西就错了。当某件事失败,当我不理解某件事,或当出现新的事情时,我会写测试。这样,我的测试永远不会是徒劳的,也不会遵守“100%代码覆盖率”的政策,我也不会感到无聊。

写否定测试通常比写“晴天”测试更有趣。仔细考虑所有可以打破类的创造性方法(传入null、值太大/太小等)


它不仅会给你的大脑一个不同的角度去思考,而且会让你的类更加健壮,因为人们会用null、大数字等来称呼它。

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

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

而且我经常运行测试;最后的“所有测试通过”信息让我对目前为止所写的内容感到很舒服。。。当我发现(并修复)一个bug时,我也很高兴


有时,我会很高兴地看到我在测试中使用的名字和号码(出生日期、最喜欢的玩家号码、电话号码……)

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

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

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

实际上,编写任何类型的代码都可能很无聊,或者很有趣。。。但这更多的是开发人员的作用,而不是代码的作用:)我的朋友被迫为一家公司编写代码,尽管他不是真正的程序员,他的评论是“我不明白你怎么能整天这么做!!!”

由于您是一名开发人员,我的感觉是您确实喜欢编写代码,所以真正的问题是您没有正确地遵循TDD,没有将测试作为开发的真正部分。即使一个框架可能会试图使这成为必要,但真正取决于您是否正确地遵循该过程(即首先编写测试),并将其与您的开发进行真正的集成


然后,它实际上是整个开发中不重要的一部分,比如检入代码、注释、格式化——所有这些都可能让一些人觉得“无聊”,但却是必要的。这并不困扰我们,因为这只是开发的一部分,我们发现开发很有趣。

我担心这听起来像是一种代码味道

测试是否因为重复性太强而无聊?

测试是否多次覆盖相同的内容?(也就是说,测试用例不只是一次测试一件事情,所以有很多相同事情的重复测试…?)

您可能会感到无聊,因为测试是在错误的抽象级别编写的,或者它们迫使您做很多不必要的工作

听起来有些东西需要重构或至少是抽象,以便每个测试都能表达出新的或与代码其余部分不同的内容

如果很多测试看起来很明显或乏味,那么您正在使用的抽象中就缺少了一些东西

我会开始在那些你觉得无聊或乏味的测试中寻找模式,然后看看是否有什么事情做不到,比如创建一个小测试框架来帮助编写这些测试

在检查时,您可能只需要删除一些冗余测试并清理命名,这样就可以清楚地知道您需要测试什么,以及您可以依赖测试套件中其他地方的测试


这一切都是为了取舍。我认为有必要重新评估您正在编写的测试类型,并看看可能有哪些替代方案。

有一个理由可以证明,无聊并不完全是坏事。我想说,相对于常规代码而言,它比测试代码更强大,但它可能也适用于测试

当你不知道你的代码在做什么时,当你不信任它时,当你每次运行它或释放它时,都会有一个坐在你肩上的小家伙尖叫着“不!”。当您在调试器中花费大量时间时;当你的代码太复杂、混乱、粗糙(不是很好)和可怕时

无聊可能是兴奋的对立面,从这个角度看,无聊是好的。一只脚接着一只脚