Spring单元测试用例不会回滚插入记录

Ant*_*ony 7 java spring unit-testing hibernate transactions

以下测试用例在功能上正常工作,但其中一个必须在数据库中创建新文章的测试方法在测试用例执行结束时不会回滚.
我希望它以这种方式工作.对于测试用例,更新文章实际上在测试用例执行结束时回滚更新.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "/applicationContext-test.xml")
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@Transactional
public class PriceRepositoryTest {

@Resource(name ="repository")
private PriceRepository repository;
@Test
public void testGetAll() throws Exception {
    Assert.assertEquals(8, repository.getAll().size());
}


@Test
@Rollback
public void shouldSaveNewArticle(){
    Article article = new Article();
    article.setName("Article");
    article.setPrice(33);
    repository.save(article);

    Assert.assertEquals(9, repository.getAll().size());
}


@Test
@Rollback
public void shouldUpdateArticle(){
    Article article = repository.getArticle(4);
    article.setPrice(33);
    repository.update(article);

    Assert.assertEquals(String.valueOf(33.0), String.valueOf(repository.getArticle(4).getPrice()));
}
Run Code Online (Sandbox Code Playgroud)

}

Sea*_*oyd 5

你的DAO也许也标有@Transactional?如果是,那就是问题:不同层上的事务性不知道您的本地事务配置.如果repository.update(article)@Transactional,它可能会也可能不会启动新事务(取决于propagation属性的值),但它会在执行后提交事务,并且您的测试方法无法拦截该事务.

这是为什么应该在服务级别而不是DAO级别启动事务的原因之一.

(如果不是这样,我谦卑地道歉)