Интеграционное тестирование с Hibernate 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);
    }
8
задан skaffman 28 February 2012 в 16:11
поделиться