JdbcTemplate.query X无法获取最新数据

问题描述 投票:0回答:1

我有一个Spring Boot程序,我的一个junit测试用例存在问题。 Spring Boot版本:1.5.9.RELEASE 我的代码是这样的

@Rollback
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = PreloadJobApplication.class)
@ActiveProfiles("test")
public class PreloadProcessorServiceTest {

    @Autowired
    PreloadProcessorService testService;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private JobCalcOrderRepository jobCalcOrderRepository;

    @Test
    public void my_test_case() {
        CreateTestDataWithJdbcTemplate.save(JobPreloadSoEntity.builder()
                        ...
                        .build(),
                jdbcTemplate);

        testService.methodToTest();

//        List<JobCalcOrderEntity> jobOrders = jobCalcOrderRepository.findAll();
//        Assert.assertNotNull(jobOrders);
//        Assert.assertEquals(9, jobOrders.size());

        long jobCount = jdbcTemplate.queryForObject("select count(*) from Job_Calc_Order", Long.class);
        Assert.assertEquals(9, jobCount);
    }
}

使用jdbcTemplate或jobCalcOrderRepository在IDEA中运行时,此代码可以获得正确的结果。但是在命令行“gradle test”中运行时得到零

我试过方法: 1.在读取数据之前添加Thread.sleep(5000)。 2.尝试运行queryForObject 3次,并测试最后的结果。 都失败了。谁能解决这个问题?谢谢。

unit-testing jpa spring-boot spring-data-jpa jdbctemplate
1个回答
0
投票

我知道原因。 实际上这个测试用例还可以。但是另一个测试用例修改了testService,并且testService.methodToTest()无法执行sql,然后所有数据都回滚。我通过测试日志找到了这个原因。我在日志中看到了这个:

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [UPDATE TestTable SET PROCESS_FLAG = 2 WHERE id> 1 and id<= 101 ]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'TestTable'.
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:416)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:440)
at com.xxxx.xxxx.xxxx.service.database.StageService.lambda$updateProcessFlag$18(StageService.java:280)
at java.util.HashMap$KeySet.forEach(HashMap.java:928)

并且“TestTable”不是我想要使用的表。 为了解决这个问题,我删除了修改testService的测试用例。

© www.soinside.com 2019 - 2024. All rights reserved.