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

jos*_*hua 6 java tdd unit-testing

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

  1. 系统必须捕获用户的名字,姓氏,电子邮件地址和可选的邮政地址
  2. 名字和姓氏必须是按字母顺序排列的
  3. firstname和lastname可能不为空
  4. 电子邮件地址必须是有效地址,并且是强制性的
  5. 邮政地址是可选的.

在java中实现上面的内容.我写了以下代码:

  1. 包含上述字段并具有相应getter和setter的java bean
  2. 上述字段的验证注释
  3. 用于保存用户的dao
  4. 用于输入用户详细信息的用户界面.

问题:单元测试应涵盖上述哪些代码?即bean的getter和setter,验证注释的存在,dao保存用户的能力,UI中相关表单元素的存在.

Mar*_*ten 4

我为我认为“我可能做错了吗?”的事情编写测试。这意味着我不必费心去测试其他人提供的库——只测试我对它们的配置。

getter 和 setter - 绝对不是。我使用 Eclipse 生成它们,不值得测试。

用于验证的注释 - 例如,我不会测试它们是否正确实现了空检查,我依赖于它们按照罐头上的说明进行操作,但我会测试它们的存在。正确的领域有它们吗?如果我用正则表达式配置它们,我会测试我的正则表达式是否正确。

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

我发现用户界面测试真的很难。我曾多次想过“这一次我会的”——但任何比表格更复杂的事情,我都会放弃。使用像 MVP 这样的模式意味着我可以注入事件来测试大部分计算内容 - 但仍然存在未测试的与 UI 的连接。我通常最终会测试其中的一些部分,复杂的数据处理,以及感觉容易出错的事情。