我对 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 等东西都很陌生,但我搜索了一些解决方案和技巧来恢复数据库,并尝试检查互联网为我提供的每一个解决方案,但没有任何效果(到目前为止)......
所以也许这里有人有想法?
提前致谢