我正在尝试围绕一些经过审计的实体进行一些测试。我的问题是 envers 只审计事务提交。
我需要创建/编辑一些测试对象,提交事务,然后检查修订。
使用 envers 进行集成测试的最佳方法是什么?
更新:这是我想要实现的一个非常糟糕的、非确定性的测试类。我宁愿这样做而不依赖于测试方法的顺序
首先在单个事务中创建一个帐户和 account_transaction。两个经审计的条目均适用于修订版 1。
其次在新交易中更新了 account_transaction。经审核的条目为修订版 2。
第三,在修订版 1 中加载经审计的帐户并对其进行处理。
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class TestAuditing {
@Autowired
private AccountDao accountDao;
@PersistenceContext
private EntityManager entityManager;
@Test
@Rollback(false)
public void first() {
Account account = account("Test Account", "xxxxxxxx", "xxxxxx");
AccountTransaction transaction = transaction(new Date(), Deposit, 100, "Deposit");
account.setTransactions(newArrayList(transaction));
accountDao.create(account);
}
@Test
@Rollback(false)
public void second() {
Account account = accountDao.getById(1L);
AccountTransaction transaction = account.getTransactions().get(0);
transaction.setDescription("Updated Transaction");
accountDao.update(account);
}
@Test
public void third() {
AuditReader reader = AuditReaderFactory.get(entityManager);
List<Number> accountRevisions = reader.getRevisions(Account.class, 1L);
//One revision [1]
List<Number> transactionRevisions = reader.getRevisions(AccountTransaction.class, 1L);
//Two revisions [1, 2]
Account currentAccount = accountDao.getById(1L);
Account revisionAccount = (Account) reader.createQuery().forEntitiesAtRevision(Account.class, 1).getSingleResult();
System.out.println(revisionAccount);
}