我们有一个在我们的JPA实体上使用AuditingEntityListener的Spring项目:
@EntityListeners(AuditingEntityListener.class)
我们的基础实体将lastModifiedDate定义为:
@Column(name = "modified_time")
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
保存或更新实体时会自动设置此值 - 这就是我们希望应用程序的行为方式。但是,当我们尝试在我们的测试套件中设置数据时遇到问题,因为在某些情况下(并非所有情况),我们想绕过此字段的自动设置并将值设置为自己。在这种特定情况下,我们试图订购一堆测试数据,然后针对它运行测试。
有没有办法绕过或关闭AuditingEntityListener以创建测试数据?
答案 0 :(得分:0)
我可以想象以下解决方案:创建两个persistence.xml
文件 - 一个用于生产,另一个用于测试目的:
与生产相关的persistence.xml包含对orm_production.xml
映射文件的引用,该文件指定具有AuditingEntityListener
属性的entity-listener
与persistence.xml相关的测试可能包含对orm_test.xml
maping文件的引用,该文件指定具有AuditingEntityListener
属性的entity-listener
。此外,您的基本实体需要完全在xml映射文件中定义,并指定:
metadata-complete
属性:告知提供程序忽略代码内注释exclude-default-listeners
属性:告诉提供程序忽略实体侦听器,但仅针对相应的基本实体答案 1 :(得分:0)
声明
@MockBean
private AuditingHandler auditingHandler
在测试中应防止@LastModifiedDate
生效。