2017-02-21 153 views
1

我的spring-data-jpa backend有一个用大量测试数据填充(测试)数据库的类。该类使用spring数据存储库来创建实体。我所有的实体都在模型类上注解了@CreatedData和相应的@EntityListeners(AuditingEntityListener.class)注释。迄今为止,这工作得很好。 dateCreated自动设置正确。如何在过去设置@CreatedDate(用于测试)

但是在运行时Junit测试我有时需要创建一个带有dateCreated的(测试)对象。我怎样才能存档这个?只能通过普通的JDBC?

+0

The(not)quick and dirty way:'Thread.sleep(1000)' – OrangeDog

+0

相关:http://stackoverflow.com/q/12155632/476716 – OrangeDog

+0

我需要CreatedDate一个月过去了:-)谢谢为链接。我已经担心春季解决方案会“大”。 – Robert

回答

1

提供的链接,我发现(使用普通JDBC)对我的作品的方式:

首先创建我的域对象与弹簧数据的JPA测试:

MyModel savedModel = myRepo.save(myModel); 

自动填充“dateCreated会”与“现在”的时间戳。因为我需要创建日期,在过去的测试中,我用手动普通的JDBC调整它们:

@Autowired 
JdbcTemplate jdbcTemplate; 

[...] 

// This syntax is for H2 DB. For MySQL you need to use DATE_ADD 
String sql = "UPDATE myTable SET created_at = DATEADD('DAY', -"+ageInDays+", NOW()) WHERE id='"+savedLaw.getId()+"'"; 
jdbcTemplate.execute(sql); 
savedModel.setCreatedAt(new Date(System.currentTimeMillis() - ageInDays* 3600*24*1000); 

不要忘了也返回模型类中setCreatedAt。

0

我不知道你使用的是精确的测试案例,但我可以看到几个解决方案:

  • 创建一个模拟对象,一旦dateCreated会被称为归期 一个月前
  • 也许使用-MEM分贝,与日期填充它测试前
  • 去AOP在评论
+0

感谢您的建议:MockObjects:我需要在我的数据库中每个具有不同创建日期的hundrests条目。 InMemoryDB:这就是我正在使用的。我用我的TestDataCreator.java填充它我正在用java创建我的testdata(而不是简单的sql在data.sql文件中),因为我需要在测试数据条目之间调整大量引用。 – Robert

相关问题