这是场景。我有 VO(值对象)或 DTO 对象,它们只是数据的容器。当我把它们分开并保存到一个数据库中时(由于很多原因)没有优雅地映射到 VO,我想测试一下是否每个字段都在数据库中成功创建并成功读回重建 VO。
有没有一种方法可以测试我的测试是否涵盖了 VO 中的每个字段?作为解决方案的一部分,我有一个关于使用反射遍历 VO 字段的想法,但也许你们以前解决过这个问题?
当我在 VO 中添加字段时,我希望此测试失败,并且不记得在我的测试中为其添加检查。
开发环境: 使用 JUnit、Hibernate/Spring 和 Eclipse
最佳答案
保持简单:为每个 VO/DTO 编写一个测试:
- 用测试数据填充 VO/DTO
- 保存
- (可选:使用纯 JDBC 检查所有内容是否已正确保存在数据库级别)
- 载入
- 检查加载的VO/DTO和原来的匹配
生产代码会不断发展,测试也需要维护。使测试尽可能简单,即使它们是重复的,也是恕我直言的最佳方法。 过度设计测试或测试框架本身使测试通用(例如,通过反射读取字段并自动填充 VO/DTO)会导致几个问题:
- 花在编写测试上的时间更多
- bug可能是自己在测试中引入的
- 测试的维护更难,因为它们更复杂
- 测试更难发展,例如通用代码可能不适用于新的 VO/DTO 类型,它们与其他类型略有不同,稍后将介绍(这只是一个示例)
- 不能轻易使用测试作为生产代码如何工作的示例
测试代码和生产代码在本质上非常不同。在生产代码中,您会尽量避免重复并最大限度地重用。生产代码可能很复杂,因为它经过了测试。另一方面,你应该尝试让测试尽可能简单,重复是可以的。如果重复的部分被破坏,测试无论如何都会失败。
当生产性代码发生变化时,这可能需要对多个测试进行微不足道的更改。问题是测试被视为乏味 代码段。但我认为他们应该这样。
如果我答错了你的问题,请告诉我。
关于java - 在单元测试中反射(reflection)以检查代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874296/