1

我有以下集成测试:

@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();

我发现测试在线冻结org.assertj.db.type.Changes#setStartPointNowt.getRowsList();但我不知道如何解决它。

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

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

4

2 回答 2

0

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

Changes changes = new Changes(new Table(source, "big_table")).setStartPointNow();

当我将其更改为:

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

SQL 返回少于 100 行。

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

于 2017-10-24T14:57:22.043 回答
0

请试试 :

@Test
public void test() {
    Changes changes = new Changes(new Table(datasource, "SOME_TABLE")).setStartPointNow();

     service.doSomething();

     changes.setEndPointNow();
     // assert database changes with changes object
}
于 2017-10-16T20:38:27.987 回答