我正在使用Hibernate Envers来审核实体更改,我们的项目中有很多已审计的Hibernate实体。因此,我想编写一个测试,为每个实体执行以下操作: 1)创建给定类的示例对象。2)使用实体管理器将该对象持久化到数据库。3)检查是否创建了相应的审计记录。
第一步的主要问题是,我正在寻找关于如何以一般方式实现它的想法?
我试着使用反射填充主字段,但是由于hibernate错误,一些实体无法保存,比如外键不存在,或者一些非空字段没有填充,或者ID应该预先定义等等。
所以我想要这样的东西
for (aClass in auditedClasses) {
val example = createFilledEntityGivenItsClass(aClass)
entityManager.persist(example)
val pk = entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity) // extracting primary key from entity.
classToPKMap.put(aClass, pk)
}
....
// using Envers to search for audit records.
....因此,最困难的部分是实际实现这个createFilledEntityGivenItsClass方法。
用例:一些开发人员添加了一个新的实体类型,将其标记为@Audited,并期望一切正常。他想推进自己的功能,但测试失败了,并对他说:“你的实体实际上并不是因为某种原因而被审计的。请调查这个问题。”
有什么想法吗?建议?
发布于 2019-06-24 15:42:32
这些细微差别通常是由特性驱动的,并且试图编写一个考虑到所有这些非常具体的细微差别的通用解决方案,如果不是这样的话,就很容易出现问题,而且是不可能的。向应用程序引入新实体和特性的开发人员应该编写自己的单元和集成测试,并将这些测试添加到应用程序的测试套件中。
我建议您后退一步,为开发人员提供一种方法来验证通过helper类成功完成的审计操作,这些方法可以抽象出Envers的内容,并且只需要他们对审计系统的工作方式有基本的了解。
https://stackoverflow.com/questions/56588537
复制相似问题