![]() |
1
3
TDD的一个实践是使用婴儿步骤(在乞讨中可能非常无聊),这是使用非常小的步骤,以便您了解您的问题空间,并为您的问题提供一个良好和满意的解决方案。
所以我建议你把注意力集中在婴儿的步骤上,以便得到一个合适的可测试的设计 |
![]() |
2
1
我不认为任何真正的TDD实践者会声称它完全消除了错误或回归的可能性。 记住,TDD基本上是关于 设计 ,不是关于 或者质量控制。说“我所有的测试都通过”并不意味着“我完成了” 如果您的需求或高级设计发生了重大变化,那么您可能需要扔掉所有测试和所有代码。有时候事情就是这样。这并不意味着TDD帮不了你。 |
![]() |
3
1
如果应用得当,TDD实际上会让你的生活在不断变化的需求面前变得更加轻松。
另一方面,如果您只是在设计代码之后对其进行单元测试,那么当需求发生变化时,您很可能会遇到问题。当子系统改变时,测试会很快失败(因为它们有效地标记了回归)和那些脆弱的测试是有区别的,因为它们依赖于太多不相关的系统状态。前者应该可以通过几行代码来修复,而后者可能会让你绞尽脑汁数小时试图解开它们。 |
![]() |
4
1
唯一正确的答案是 这取决于 .
事实上,“软件”和“硬件”都是千差万别的,没人会想到买一本关于桥梁制作的书来设计一个电子设备或建造一个花园小屋。 |
![]() |
5
1
我想你对TDD有些误解。为了更好地解释和举例说明它是什么以及如何使用它,我建议阅读肯特贝克的 Test-Driven Development: By Example . 以下是一些进一步的评论,可能有助于您理解TDD是什么以及为什么有些人会信誓旦旦地说:
“你如何使TDD实践对你而不是对你起作用?”
|
![]() |
6
0
TDD的一个基本原则是避免生产代码和测试代码中的重复。如果一个单一的设计变更意味着你必须重写所有的东西,那么你没有做TDD(或者根本没有正确地做TDD)。 一些 生产代码和一些测试,但不是所有的测试,而且更改大多很简单,甚至可以通过重构工具自动完成。 |
![]() |
7
0
在不知道什么在UI中最有效的情况下编写代码,同时编写单元测试。那很费时。最好开始制作一些图形用户界面的原型,以便正确地进行交互。。然后用单元测试重写(如果雇主允许)。 |
![]() |
8
0
持续集成是一个关键。如果您的测试在每次签入源代码管理时都自动运行(如果失败,其他人都会看到),则更容易避免“过时”的测试并保持绿色。
另见 http://thought-tracker.blogspot.com/2005/11/notes-on-pragmatic-unit-testing.html -一定要买这本书! 编辑:也许我看错了。假设您有一个要重新设计的遗留代码库。我要做的第一件事是为当前行为添加测试。没有测试的重构是有风险的——你可能会改变行为。在那之后,我将开始清理设计,在每个步骤之后运行我的单元测试。这会让我相信我的改变没有破坏任何东西。 在某个时候API可能会改变。这将是一个突破性的变化-客户端将必须更新。测试会告诉我这很好,因为我必须更新任何现有的客户端(包括测试)。 现在不是TDD了。但想法是一样的——测试是行为规范(是的,我在BDD中添加了阴影),它们让我有信心重构实现,同时确保我保留行为(以及在更改接口时让我知道)。 在实践中,我发现TDD能给我关于糟糕的界面设计的即时反馈。我是我的第一个客户-我知道什么时候我的API很难使用。 |
![]() |
9
0
我们倾向于做很多事 预先设计TDD,知道它可以改变。我已经通过巨大的旋转(这是一个web应用程序,不,这是一个RESTful服务器,不,这是一个bot)。这些测试为我提供了重构、重构和演化代码的能力,比未经测试的代码要容易得多。虽然看起来很矛盾,但这是真的——即使你有更多的代码,你也能够做出重大的改变 在现有功能中没有任何东西被破坏。 我理解你的担心,基本假设的改变会让你放弃测试。这似乎很直观,但我个人还没有看到。有些测试是可行的,但大多数仍然有效——通常一个重大的改变并不像最初看起来那么重要。另外,随着你越来越擅长编写测试,你倾向于编写不那么脆弱的测试,这对你有帮助。 |
![]() |
mg610 · 如何开始C++单元测试 2 年前 |
![]() |
vidhu · 无URL的自动化测试 2 年前 |
![]() |
Aessandro · js开关站单元测试[关闭] 6 年前 |
![]() |
AntoineLB · 断言后期工作Django 6 年前 |
|
ravikant · Selenium脚本不工作异常 6 年前 |