我正在寻找我已经测试过很多东西的所有互联网,但我找不到适用于我的代码的答案。
我想在运行测试后回滚我的数据库(或者在每次测试后我并不关心)
目前这是我的代码:
@Transactional
public class ApplicationServiceTest {
private ApplicationService applicationService;
@Test
public void testAddApplication() throws ExceptionMessage
{
Application application = applicationService.addApplication("nom", true, "domaineFonctionnel");
// [...] testing
}
//[...] @Before and @After doing things
}
public class ApplicationService{
private ApplicationDao applicationDao;
public Application addApplication(String nom, boolean autorise, String domaineFonctionnel)
{
Application application = new Application();
// [..] Initialise application with parameters
applicationDao.addApplication(application);
return application;
}
}
public class ApplicationDao extends Dao
{
private static EntityManagerFactory entityManagerFactory;
public void updateApplication(Application application) {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.merge(application);
entityManager.getTransaction().commit();
entityManager.close();
}
}
所以根据我的阅读,@Transactional 应该默认回滚我的交易。但事实并非如此。为什么?
(我尝试将@Transactional 添加到 dao 和服务中,但它没有改变任何东西)
最佳答案
如果您不在测试类中使用 SpringJUnit4ClassRunner
运行程序,则忽略 @Transactional
注释。
尝试添加它:
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class ApplicationServiceTest {
关于java - Spring 测试 : Rollback the database after testing the dao,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41057580/