Spring 3.1.1.RELEASE、Hibernate 4.1.0.Final、JPA 2、JUnit 4.8.1、および HSQL 2.2.7 を使用しています。サービス メソッドでいくつかの JUnit テストを実行したいと考えています。各テストの後、インメモリ データベースに書き込まれたデータをロールバックしたいと考えています。ただし、テスト全体をトランザクションとして扱いたくありません。たとえば、このテストでは
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class ContractServiceTest
{
…
@Autowired
private ContractService m_contractService;
@Test
public void testUpdateContract()
{
// Add the contract
m_contractService.save(m_contract);
Assert.assertNotNull(m_contract.getId());
// Update the activation date by 6 months.
final Calendar activationDate = Calendar.getInstance();
activationDate.setTime(activationDate.getTime());
activationDate.add(Calendar.MONTH, 6);
m_contract.setActivationDate(activationDate.getTime());
m_contractService.save(m_contract);
final List<Contract> foundContracts = m_contractService.findContractByOppId(m_contract.getOpportunityId());
Assert.assertEquals(foundContracts.get(0), m_contract);
} // testUpdateContract
サービスへの 3 つの呼び出し (「m_contractService.save」、「m_contractService.save」、「m_contractService.findContractByOppId」) があり、それぞれがトランザクションとして扱われます。しかし、各単体テストの後にメモリ内データベースを元の状態にリセットする方法がわかりません。
追加情報を提供する必要がある場合はお知らせください。