Я пытаюсь построить несколько тестов для некоторых проверяемых объектов. Моя проблема в том, что проверяет только фиксацию транзакции.
Мне нужно создать / отредактировать несколько тестовых объектов, зафиксировать транзакцию и затем проверить исправления.
Какой лучший подход к интеграционному тестированию с 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);
}