【问题标题】:AssertJ-DB freezes in Spring Boot integration testAssertJ-DB 在 Spring Boot 集成测试中冻结
【发布时间】:2018-02-07 05:18:00
【问题描述】:

我有以下集成测试:

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class ServiceTestIT {

    @Autowired
    private ServiceUnderTest service;

    @Autowired
    private DataSource dataSource;

    @Before
    public void setup() {
        Changes changes = new Changes(new Table(datasource, "SOME_TABLE"));
        changes.setStartPointNow();
    }

    @Test
    public void test() {
         service.doSomething();
         changes.setEndPointNow();
         // assert database changes with changes object
    }
}

当我运行这个测试时,它会冻结在 @Before 方法中的更改起点行:

changes.setStartPointNow();

我发现测试在t.getRowsList(); 行的org.assertj.db.type.Changes#setStartPointNow 中冻结,但我不知道如何解决。

当我删除 @Transactional 注释时,一切正常,没有任何冻结,但测试无法正常工作。

有没有办法解决这个问题保留@Transactional注解?

【问题讨论】:

    标签: spring junit spring-transactions assertj


    【解决方案1】:

    请尝试:

    @Test
    public void test() {
        Changes changes = new Changes(new Table(datasource, "SOME_TABLE")).setStartPointNow();
    
         service.doSomething();
    
         changes.setEndPointNow();
         // assert database changes with changes object
    }
    

    【讨论】:

    • 问题仍然出现,您能解释一下您的方法的主要变化是什么吗?
    【解决方案2】:

    就我而言,问题是大桌子。我正在观察超过 10 000 行的表格的变化。

    更改更改 = 新更改(新表(来源, "big_table")).setStartPointNow();

    当我把它改成:

    请求 request1 = new Request(source, "select * from big_table where some_column is null");

    SQL 返回少于 100 行。

    变化开始迅速发挥作用。当变化在桌子上观看时,时间在 17-25 秒之间。请求时间小于 0,2s。

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2020-04-24
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多