Beginning TDD - Challenges? Solutions? Recommendations?好的,我知道已经开始使用TDD了。.但是,我想我还是知道一般的共识是这样做,但是,我似乎在进入游戏时遇到以下问题:
因此,基本上,我在这里寻找的不是"随便做",而是"我这样做了,遇到了问题,并通过此方法解决了"。 首先,当您第一次开始尝试以编码风格使用TDD时,感到沮丧是正常的。只是不要灰心和戒烟,您需要花一些时间。这是我们思考如何解决代码问题的主要模式转变。我喜欢这样想,就像我们从程序编程转向面向对象的编程一样。 其次,我认为测试驱动开发首先是一项设计活动,该活动通过创建一个测试来充实组件的设计,该测试首先描述将要公开的API以及您将如何使用它的功能。该测试将帮助塑造和塑造被测系统,直到您能够封装足够的功能来满足您要执行的任何任务。 考虑到以上段落,让我们看一下您的问题:
我在第一个问题的答案中向您介绍了嘲讽术语。当您将模拟引入到您的TDD军械库中时,它极大地简化了测试,从而使那些不属于被测系统的零件抽象出来。以下是有关模拟框架的一些资源:
除了阅读有关过程的信息外,帮助使用TDD的一种方法是观察人们的行为。我建议您在DNRTV上观看JP Boodhoo的屏幕广播。检查这些:
好的,这些将帮助您了解如何使用我介绍的术语。它还将介绍另一个称为Resharper的工具,以及该工具如何促进TDD流程。在进行TDD时,我对这个工具的推荐不够。似乎您正在学习该过程,而您只是发现使用其他工具已经解决的一些问题。 如果不通过添加肯特·贝克(Kent Beck)的新系列《实用程序员的测试驱动开发》来更新这一点,我想我会对社区造成不公正。 根据我自己的经验: 仅测试您自己的代码,而不测试基础框架的代码。因此,如果您使用的是通用列表,则无需测试添加,删除等。 没有2.看那边!猴子! NUnit是必经之路。 您绝对无法测试所有结果。我测试了我期望发生的事情,然后测试了一些我希望得到异常或无效响应的极端情况。如果由于忘记测试而导致错误出现,那么您应该做的第一件事(在尝试修复错误之前)是编写测试以证明该错误存在。 我发现轻松记住TDD本质的三张索引卡中说明的原理是一个很好的指南。 无论如何,回答您的问题 老兄,认真地做吧。 :)
我认为,TDD最重要的事情(实际上是,以某种递归的方式带来的巨大成果之一)是对依赖关系的成功管理。您必须确保模块进行了隔离测试,而无需进行详尽的设置。例如,如果您要测试最终发送电子邮件的组件,请使电子邮件发送者具有依赖性,以便您可以在测试中对其进行模拟。 我对此的看法如下:
除此之外,我想我会说我在博客上发表了有关测试入门的想法(在此讨论和我自己的研究之后),因为它可能对查看此主题的人们有用。 " TDD –测试驱动开发入门" –到目前为止,我收到了很多反馈,非常感谢你们提供的更多信息。 我希望这有帮助! :)
在过去的一年中,我越来越相信TDD的好处。 我对TDD遇到的最大问题是使用标准组织的规范以及该标准的第三方实现,即事实上的标准。我对规范的字母进行了很多非常好的单元测试编码,只是发现在栅栏另一侧的实现将标准视为咨询文档。他们玩起来很放松。解决此问题的唯一方法是对实现以及单元测试进行测试,并在必要时重构测试和代码。真正的问题是我坚信,只要我拥有代码和单元测试,一切都很好。不是这样您需要在进行单元测试的同时构建实际的输出并执行功能测试。在整个过程中,一小部分收益-一直到用户或利益相关者手中。 保持测试简短,"原子"。在每次测试中测试最小的假设。使每个TestMethod独立,对于集成测试,我什至为每个方法创建一个新的数据库。如果您需要为每个测试构建一些数据,请使用"初始化"方法。使用模拟将测试类与依赖项隔离开。 我一直认为"为了证明在所有情况下都行得通,我需要写的最少代码量是多少?" 我认为(您的里程可能会有所不同): 1-如果您没有写它,请不要对其进行测试。如果您编写它并且没有测试,那么它就不存在。 3-众所周知,xUnit既免费又很棒。 2&4-确定要测试的内容是您可以永远与自己争论的事情之一。我尝试使用按合同设计的原则来划清界限。查看"面向对象的软件构造"或"实用编程器"以获取有关其详细信息。 上面的建议是很好的,并且如果您想要一个免费框架列表,那么您看起来就不会比Wikipedia上的xUnit Frameworks List更远。希望这可以帮助 :) 无论如何,我都不是TDD的专家,但是我的观点是:
xUnit测试框架通常是免费使用的,因此,如果您是.Net的人,请签出NUnit,如果您是Java,请签出JUnit。 |