Java 确定什么是单元测试,什么不是单元测试

Java 确定什么是单元测试,什么不是单元测试,java,unit-testing,tdd,Java,Unit Testing,Tdd,我仍然在理解测试驱动开发。我对应用程序的用户注册模块有以下要求 系统必须捕获用户的名字、姓氏、电子邮件地址以及可选的邮政地址 名字和姓氏必须按字母顺序排列 firstname和lastname不能为空 电子邮件地址必须是有效地址,并且是必需的 邮政地址是可选的 用java实现上述功能。我编写了以下代码: 包含上述字段并具有相应getter和setter的Javabean 上述字段的验证注释 用于保存用户的dao 用于输入用户详细信息的用户界面 问题:单元测试应该包括上面哪一个代码?i、 e be

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

  • 系统必须捕获用户的名字、姓氏、电子邮件地址以及可选的邮政地址
  • 名字和姓氏必须按字母顺序排列
  • firstname和lastname不能为空
  • 电子邮件地址必须是有效地址,并且是必需的
  • 邮政地址是可选的
  • 用java实现上述功能。我编写了以下代码:

  • 包含上述字段并具有相应getter和setter的Javabean
  • 上述字段的验证注释
  • 用于保存用户的dao
  • 用于输入用户详细信息的用户界面

  • 问题:单元测试应该包括上面哪一个代码?i、 e bean的getter和setter、验证注释的存在、dao保存用户的能力、UI中相关表单元素的存在。

    关于TDD,我知道的一件事是,您永远不会先编写代码

    您首先编写一个测试,当您的测试失败时,您编写/生成代码来修复它,然后编写更多的测试来破坏您想要实现的功能,并为它编写/修复原始代码

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


    请参考维基百科,了解如何使用TDD开始您的项目-

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

    能手和二传手——绝对不是。我使用Eclipse生成它们,不值得测试

    用于验证的注释——例如,我不会测试它们是否正确实现空检查,我依赖于它们是否按照tin上的说明执行,但我会测试它们是否存在。正确的领域有它们吗?如果我用regexp配置它们,我会测试我是否正确使用了regexp

    另一个例子,如果我用Hibernate存储POJO。我没有检查Session.save(myObj)是否正常工作,但是我可能做了一些错误的事情,比如事务边界和映射配置(所有字段都已保存)等


    我发现用户界面测试非常困难。我曾多次想过“这次我会的”——但任何比形式更复杂的东西,我都放弃了。使用像MVP这样的模式意味着我可以注入事件来测试大部分计算内容——但仍然有到UI的连接未经测试。我通常会以测试it的一些方面、复杂的数据处理和容易出错的事情而告终。

    请用适当的技术(例如Java)对此进行标记。@RPM1984:为什么?这个问题显然是关于单元测试和TDD的,答案同样适用于任何其他语言——就“我应该/不应该”而言,我同意。但是实际的实现与技术对技术(例如UI测试)有很大的不同。但我想这不是关于如何注册的问题,所以我收回我的声明。所以,约翰·奥哈拉和莎拉·威克姆·布朗女士都将很难注册。(此外,我们还有一名来自印度次大陆的员工,他的名字叫Gaurav;没有姓——或者没有名字。)以及“系统必须捕获。。。“邮政地址”和“邮政地址是可选的”是准矛盾的。@Platinum,@RPM1984:因为问题提到了Java(beans、DAO)等,我不确定特定语言的标签有多重要。您是否建议我为问题中指定的所有部分编写测试?包括能手和二传手?如果不是,我的问题是我应该做什么,我不应该做什么单元测试。我想补充一点,您应该只测试您自己编写的代码(或者将要编写的代码,正如TDD建议的那样)。不要尝试测试(例如)第三方数据访问库,因为那不是你的工作。@Sairam,维基百科的理论很有趣。但我手头有一个真实的生活状况。这就是为什么我把问题说得非常具体。“上面哪一段代码应该包含在单元测试中?”正如Azure所说,您需要为所有需要的代码编写测试write@StephenC-“实时”使用情况不佳。修好了。