检查代码覆盖率的单元测试中的反射

gtr*_*rak 4 java testing tdd junit java-ee

这是场景.我有VO(值对象)或DTO对象,它们只是数据的容器.当我把它们分开并将它们分开保存到一个数据库中(由于很多原因)没有优雅地映射到VO时,我想测试是否在数据库中成功创建每个字段并成功读回重建VO.

有没有办法可以测试我的测试是否覆盖了VO中的每个领域?作为解决方案的一部分,我有一个关于使用反射来迭代VO字段的想法,但也许你们之前已经解决了这个问题?

当我在VO中添加字段时,我希望此测试失败,并且不记得在我的测​​试中添加对它的检查.

dev环境:使用JUnit,Hibernate/Spring和Eclipse

ewe*_*nli 5

保持简单:每个VO/DTO编写一个测试:

  1. 用测试数据填充VO/DTO
  2. 保存
  3. (可选:使用纯JDBC检查所有内容是否已在数据库级别正确保存)
  4. 加载它
  5. 检查加载的VO/DTO和原始VO/DTO是否匹配

生产性代码将不断发展,并且还需要维护测试.使测试尽可能最简单,即使它们是重复的,恕我直言也是最好的方法.过度设计测试或测试框架本身以使测试通用(例如通过读取带反射的字段并自动填充VO/DTO)会导致几个问题:

  1. 花在编写测试上的时间更长
  2. bug可能会在测试中引入
  3. 维护测试更难,因为它们更复杂
  4. 测试更难以发展,例如,通用代码可能不适用于与另一种稍有不同的新型VO/DTO,稍后将介绍(仅作为示例)
  5. 测试不能轻易用作生产代码如何工作的示例

测试和生产代码本质上是非常不同的.在生产代码中,您尝试避免重复并最大化重用.生产代码可能很复杂,因为它经过测试.另一方面,您应该尝试尽可能简单地进行测试,并且重复是可以的.如果重复的部分被破坏,则测试将无论如何都会失败.

当生产代码发生变化时,这可能需要对几个测试进行简单的更改.问题是测试被视为无聊的代码.但我认为这就是他们的方式.

如果我的问题不对,请告诉我.