TDD:为什么、如何和真实世界的测试驱动代码

TDD:为什么、如何和真实世界的测试驱动代码,tdd,Tdd,首先,请容忍我所有的问题。我以前从未使用过TDD,但我越来越意识到我应该这样做。我已经阅读了很多关于TDD的帖子和指南,但有些东西还不清楚。用于演示的大多数示例都是数学计算或其他一些简单操作。我也开始读罗伊·奥舍洛夫关于TDD的书。以下是我的一些问题: 如果您的解决方案中有一个对象,例如Account类,那么测试在该对象上设置属性(例如帐户名)的好处是什么,那么您可以断言您设置的任何内容都是正确的。这会失败吗 另一个例子,账户余额,创建一个余额为300的对象,然后断言余额实际上为300。那怎么会

首先,请容忍我所有的问题。我以前从未使用过TDD,但我越来越意识到我应该这样做。我已经阅读了很多关于TDD的帖子和指南,但有些东西还不清楚。用于演示的大多数示例都是数学计算或其他一些简单操作。我也开始读罗伊·奥舍洛夫关于TDD的书。以下是我的一些问题:

如果您的解决方案中有一个对象,例如Account类,那么测试在该对象上设置属性(例如帐户名)的好处是什么,那么您可以断言您设置的任何内容都是正确的。这会失败吗

另一个例子,账户余额,创建一个余额为300的对象,然后断言余额实际上为300。那怎么会失败呢?我在这里测试什么?我可以看出,用不同的输入参数测试减法运算会是一个更好的测试

我应该测试对象的实际用途是什么?方法还是属性?有时,在基础结构层中还将对象作为服务。对于方法,如果您有一个三层应用程序,并且业务层正在为某些数据调用数据层。在这种情况下测试什么?参数?数据对象不为空?服务方面呢

然后,关于我的问题,关于现实生活中的项目,如果你有一个绿色项目,你想开始与TDD。你先从什么开始?你是把你的项目分成几个功能,然后tdd每个功能,还是你真的任意挑选,然后从那里开始

例如,我有一个新项目,它需要登录功能。我是否从创建用户测试、帐户测试或登录测试开始。我先从哪一个开始?那门课我先考什么

假设我决定创建一个具有用户名、密码和一些其他属性的用户类。我应该首先创建测试,修复所有构建错误,运行测试以使其失败,然后再次修复以获得绿灯,然后重构。那么,我应该在该类上创建的第一个测试是什么?例如:

  • 用户名\u长度\u大于\u 6
  • 用户名\u长度\u小于\u 12
  • 密码复杂性
如果您断言长度大于6,那么如何测试代码?如果错误小于6,我们会抛出错误吗

如果我重复我的问题,我很抱歉。我只是想开始使用TDD,但我的心态还没有改变。谢谢,希望有人能帮我确定我错过了什么。顺便问一下,有人知道我可以参加关于TDD的讨论小组或聊天吗

  • 测试直到恐惧被无聊所取代。对属性访问器和构造函数编写测试的成本很高。我通常间接测试它们,作为其他(更高)测试的一部分

  • 对于一个新项目,我建议看看ATDD。查找要首先选择的用户故事(基于用户值)。编写一个验收测试,当用户故事完成时应该通过。现在深入研究AT需要通过的类型——使用TDD。验收测试将告诉您需要哪些对象和哪些行为。然后使用TDD一次实现一个。当您的所有测试(包括acc.测试)都通过时,您将选择下一个用户故事并重复

  • 假设您选择“创建用户”作为第一个故事。然后你写一些例子来说明应该如何工作。将它们转换为自动验收测试。 创建有效用户->应创建帐户 创建无效用户(显示无效内容的差异组合)->不应创建帐户,向用户显示有用的错误

    AccountsVM.CreateUser(用户名、密码) AccountsVM.HasUser(用户名) AccountsVM.ErrorMessage


    测试将显示您需要上述内容。然后你去试驾他们。

    看看低级BDD。介绍得很好

    与其测试属性,不如考虑您正在寻找的行为。例如:

    Account Behavior:
        should allow a user to choose the account name
        should allow funds to be added to the account
    
    User Registration Behavior:
        should ensure that all usernames are between 6 and 12 characters
        should ask the password checker if the password is complex enough <-- you'd use a mock here
    
    帐户行为:
    应允许用户选择帐户名
    应允许将资金添加到帐户中
    用户注册行为:
    应确保所有用户名都在6到12个字符之间
    
    应询问密码检查器密码是否足够复杂不要测试太简单而无法破解的密码

    • getter和setter太简单了,不能被破坏,所以说,代码太简单了,错误不会发生

    • 测试公共方法并断言响应符合预期。如果方法返回void,您必须测试“附带后果”(有时并不容易,例如测试发送的电子邮件)。当这种情况发生时,您可以使用mock来测试方法的执行方式,而不是测试响应(您可以询问mock被测试的类是否以所需的方式调用他)

    我开始学习Katas的基础知识:JUnit和TestNG;然后是哈姆克雷斯特;然后阅读EasyMock或Mockito文档

    在github或此处查找katas http://codingdojo.org/

    第一次测试应该是最简单的!可能只是强迫你创建剪切(测试中的类)

    不过,还是试试katas吧


    testdrivendevelopment Yahoo集团有一些非常明智和乐于助人的成员。