1

我对 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 似乎被赎回了)

但是,如果我在所有测试之后或仅在这一次“写入”-Test 之后查看我的本地 derbyDB,我的数据库中仍然有这个实体可用。

因此,没有执行回滚。

我对所有这些 JPA、Hibernate、DBUnit 等东西都很陌生,但我搜索了一些解决方案和技巧来恢复数据库,并尝试检查互联网为我提供的每一个解决方案,但没有任何效果(到目前为止)......

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

提前致谢

4

0 回答 0