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