有没有办法绕过AuditingEntityListener为测试设置数据?

时间:2014-09-12 15:45:24

标签: java spring unit-testing jpa auditing

我们有一个在我们的JPA实体上使用AuditingEntityListener的Spring项目:

@EntityListeners(AuditingEntityListener.class)

我们的基础实体将lastModifiedDate定义为:

@Column(name = "modified_time")
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;

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

有没有办法绕过或关闭AuditingEntityListener以创建测试数据?

2 个答案:

答案 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生效。