加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

春天 – @NotTransactional替代品

发布时间:2020-12-15 01:37:08 所属栏目:大数据 来源:网络整理
导读:我正在进行单元测试,它通过DAO将信息提交到Oracle数据库,然后检索它并检查所有内容是否保持不变. 测试类中还有其他单元测试,在课程顶部我有: @TransactionConfiguration (defaultRollback = true) 我想知道如何删除@NotTransactional.我没有在类上指定Trans

我正在进行单元测试,它通过DAO将信息提交到Oracle数据库,然后检索它并检查所有内容是否保持不变.

测试类中还有其他单元测试,在课程顶部我有:

@TransactionConfiguration (defaultRollback = true)

我想知道如何删除@NotTransactional.我没有在类上指定Transactional,所以默认情况下不应该像那样测试.由于这是它自己的测试,我不知道@BeforeTransaction(或After)注释是否正确.

最大的问题是没有@NotTransactional,似乎没有运行unsubscribe()函数. (垃圾标志不变.)

再次运行测试,@ rollback = false和@NonTransactional存在,我在测试完成后在数据库中看到trash标记正确设置为true.

@RunWith (SpringJUnit4ClassRunner.class)
@TransactionConfiguration (defaultRollback = true)
public class DatabaseTest {

    @Autowired (required = true)
    private FooDao

谢谢!

最佳答案
@Rollback(false)并不总是足够的,它只意味着在测试结束时不会回滚事务.但它仍然在事务中运行测试,这有时会导致与其他正在运行的事务冲突.

正如Spring建议的那样,您有两种选择:

>将测试类拆分为两个,事务测试可以是在使用@Transactional注释的测试类中,而在没有事务注释的测试类中进行非事务测试.
>使用方法注释而不是类注释,使用@Transactional注释每个事务测试,但是将其从类范围中删除

引用Spring documentation:

As of Spring 3.0,@NotTransactional is deprecated in favor of moving
the non-transactional test method to a separate (non-transactional)
test class or to a @BeforeTransaction or @AfterTransaction method. As
an alternative to annotating an entire class with @Transactional,
consider annotating individual methods with @Transactional; doing so
allows a mix of transactional and non-transactional methods in the
same test class without the need for using @NotTransactional.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读