有没有一种方法可以绕过AuditingEntityListener来为测试设置数据?

4
我们有一个使用JPA实体上的AuditingEntityListener的Spring项目:
@EntityListeners(AuditingEntityListener.class)

我们的基本实体定义了一个lastModifiedDate属性:
@Column(name = "modified_time")
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;

当实体被保存或更新时,该值会自动设置 - 这正是我们希望应用程序的行为方式。但是,在设置测试套件中的数据时,我们遇到了问题,因为在某些情况下(不是所有情况),我们希望绕过自动设置此字段并自己设置值。在这种特定情况下,我们正在尝试对一堆测试数据进行排序,然后对其运行测试。

是否有任何方法可以绕过或关闭AuditingEntityListener以创建测试数据?

2个回答

7
声明
@MockBean
private AuditingHandler auditingHandler

在您的测试中,应该防止@LastModifiedDate产生任何影响。


太棒了!这是使用Mockk / Kotlin的代码:@MockkBean(relaxed = true) private lateinit var auditingHandler: AuditingHandler - Boni2k

0
我可以想象以下的解决方案:创建两个persistence.xml文件 - 一个用于生产环境,另一个用于测试目的:
  • 与生产相关的persistence.xml包括对orm_production.xml映射文件的引用,该文件指定了带有entity-listener属性的AuditingEntityListener

  • 测试相关的persistence.xml可能包括对orm_test.xml映射文件的引用,该文件指定了带有entity-listener属性的AuditingEntityListener。此外,您的基本实体需要完全在xml映射文件中定义,并指定:

    • metadata-complete属性:告诉提供程序忽略代码注释
    • exclude-default-listeners属性:告诉提供程序忽略实体侦听器,但仅适用于相应的基本实体

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接