确定单元测试的内容和不测试的内容

时间:2010-11-29 05:43:46

标签: java unit-testing tdd

我仍然了解测试驱动开发。我对应用程序的用户注册模块有以下要求。

  1. 系统必须捕获用户的名字,姓氏,电子邮件地址和可选的邮政地址
  2. 名字和姓氏必须是字母
  3. 名字和姓氏可能不为空
  4. 电子邮件地址必须是有效地址且必须
  5. 邮政地址是可选的。
  6. 在java中实现上述内容。我写了以下代码:

    1. 包含上述字段并具有相应getter和setter的java bean
    2. 上述字段的验证注释
    3. 用于保存用户的dao
    4. 用于输入用户详细信息的用户界面。
    5. 问题:单元测试应涵盖上述哪些代码?即bean的getter和setter,验证注释的存在,dao保存用户的能力,UI中相关表单元素的存在。

2 个答案:

答案 0 :(得分:4)

我为我所说的“我可以做错了吗?”的事情编写测试。这意味着我不打算测试其他人提供的库 - 只考虑我的配置。

吸气鬼和二传手 - 绝对不是。我使用Eclipse生成它们,不值得测试。

验证的注释 - 我不会测试它们,例如,正确实现空检查,我依赖于它们在锡上执行它所说的,但我会测试它们的存在。合适的领域有它们吗?如果我用正则表达式配置它们,我会测试我的正则表达式是正确的。

另一个例子,如果我用Hibernate存储我的POJO。我没有检查Session.save(myObj)是否有效,但是我可以做错的事情,例如事务边界和映射配置(保存所有字段)等。

我发现用户界面测试非常困难。我曾经多次想过“这次我会” - 但是比形式更复杂,我放弃了。使用类似MVP的模式意味着我可以注入事件来测试大多数计算内容 - 但是仍然存在与未经测试的UI的连接。我通常最终会测试它,复杂的数据处理,以及容易出错的事情。

答案 1 :(得分:2)

我知道TDD的一件事,你永远不会先写代码。

您首先编写测试,因为您的测试失败,您编写/生成代码来修复它,然后编写更多测试来打破您打算实现的功能并为其编写/修复原始代码。

如果你有100%的代码覆盖率,这是最好的。

请参阅维基百科,了解如何使用TDD开始项目 - http://en.wikipedia.org/wiki/Test-driven_development