spring boot junit测试+@需要事务性传播\u新建
我想测试一个保存到数据库中的循环。 我在内存中建立了一个数据库,并加载了我的场景。 我有一个名为spring boot junit测试+@需要事务性传播\u新建,spring,junit,spring-boot,transactions,spring-test,Spring,Junit,Spring Boot,Transactions,Spring Test,我想测试一个保存到数据库中的循环。 我在内存中建立了一个数据库,并加载了我的场景。 我有一个名为basicinitest的基本测试类,如下所示 RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = CentralApplication.class) @WebAppConfiguration @Transactional @Ignore public class BasicInitTest
basicinitest
的基本测试类,如下所示
RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CentralApplication.class)
@WebAppConfiguration
@Transactional
@Ignore
public class BasicInitTest {
.......
}
我所有的测试类都扩展了它,每个类都有多个@test
方法。特别是其中一个调用aFooServiceImpl.iterateAndSave(List)
,它迭代列表并尝试保存单个对象
Save方法由FooServiceImpl.Save(Foo)
执行,该方法用@Transactional(传播=传播.必需\u新建)
注释。此方法在通过FooRepository.save(Foo)
保存之前,尝试查找要引发异常或保存的对象
@Transactional(propagation=Propagation.REQUIRED_NEW)
public Foo save(Foo foo) throws Exception {
Foo f = fooRepository.findById(foo.getId);
if(f) throw new Exception("ex");
return fooRepository.saveAndFlush(foo);
}
像上面的测试一样,在服务的第一行仍然处于暂停状态,而不是在没有@Transactional(propagation=propagation.REQUIRED\u NEW)
的情况下,它可以工作
我必须使用@Transactional
进行注释,以防止FooServiceImpl.iterateAndSave(List)
中出现异常,因为这有一个循环来迭代每个模型对象以执行某些操作,然后保存对象
事实上,如果我删除注释,并且保存操作出现异常,比如ConstraintViolationException
,当下一个对象被保存时,我会得到这个错误
HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in com.projecy.Foo entry (don't flush the Session after an exception occurs)
如何测试这个场景