直接用代码说话吧:@Component
public class AService {
    @Transactional
    public void addA(A a) { //将一个对象a写入表A
        ...
    }
}@Component
public class BService {
    @Transactional
    public void addB(B b) { //将一个对象b写入表B
        ...
        throw new RunntimeException();
    }
}public class SomeService {
    @Autowired;
    private AService aService;    @Autowired;
    pricate BService bService;
    
    @Transactional
    public void addSome() {
        ...
        aService.addA(a);
        bService.addB(b);
    }
}比如上面的例子,在实际运行中调用addSome的时候,由于addB会抛出异常,所以addA插入的对象回滚,数据表A是没数据的,这一点已经用肉眼在数据库种证实了。现在我想写个自动的测试:
public class SomeServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
    @Test(expected = RunntimeException.class)
    try {
        someService.addSome();
    } finally {
        //检查是否已经插入a
        Assert.assertNull(aService.selectA(a));
    }
}
获得如下错误:
java.lang.Exception: Unexpected exception, expected<RuntimeException> but was<junit.framework.AssertionFailedError>就是说已经插入,就算错误去到finally也没回滚,a还在数据库,应该如何做这类测试呢?