JPA DBUnit回滚将无法正常工作

时间:2013-11-05 12:33:00

标签: java jpa dbunit

我在JPA和DBUnit测试(系统测试)时遇到了一些烦人的问题。

为了执行多个测试,我创建了一个AbtractClass:

@ContextConfiguration(locations = { "classpath:context/test-context.xml" })
@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class AbstractJPASystemTest {

    private static final String MODULE_IDENTIFIER = "JPASystemTest";

    private Scenario scenario;

    @Resource(name = "dataSource")
    private DataSource ds;

    @Autowired
    private EntityManagerFactory emf;
    private EntityManager em;

    /**
     * Initialisierung des <code>IntegrationTestDrivers</code>.
     *
     * @param scenario2set
     * @param fixtureFileResolver
     * @throws Exception
     */
    protected static IntegrationTestDriver driver;

    @Before
    public void setUp() throws Exception {
        driver = new IntegrationTestDriver(IntegrationTestDriverConfiguration.DEFAULT);
        driver.setDataSource(this.ds); // DataSource (DB)
        driver.setSchema("APP"); // zu nutzendes DB Schema
        driver.setCaseSensitiveTableNames(false);
        //this.ds.getConnection().setAutoCommit(false); -- no effect
        this.em = this.emf.createEntityManager();
        this.em.getTransaction().begin();
    }

    @After
    public void shutDown() {
        this.em.getTransaction().rollback();
        this.em.close();
    }

我有一个很容易实现的实现:

公共类TestDetailEntityTest扩展AbstractJPASystemTest {

/** Zugriff auf die EntityTabelle */
@Autowired
private TestDetailEntityDAO dao;
@Test
public void write() throws Exception {
    //write some Entities to DB
    dao.save(...);
}
@After
public void after() throws Exception {
    driver.verifyDatabaseState();
}

测试运行良好:) (所以Test_pre.xml和Test_post.xml -conditions似乎已被兑换)

但是如果我在所有测试之后或者在这个“写” - 测试之后查看我的本地derbyDB,那么我的数据库中仍然可以使用这些实体。

因此,没有执行回滚。

我对所有这些JPA,Hibernate,DBUnit都很新,但是我搜索了一些解决方案和提示来恢复数据库,并试图检查互联网对我的每个解决方案,但没有任何效果(到目前为止)... ..

所以也许这里有人有想法?

提前致谢

0 个答案:

没有答案