0

SpringBoot 프로그램이 있습니다. junit 테스트 케이스 중 하나에 문제가 있습니다.
SpringBoot 버전 : 1.5.9.RELEASE
내 코드는 JdbcTemplate을 또는 jobCalcOrderRepository와 IDEA에서 실행하면 바로 결과를 얻을 수있는이JdbcTemplate.queryXXX가 최신 데이터를 가져올 수 없습니다.

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

이 코드는 같다.
1.Add에 Thread.sleep (5000) 읽기 데이터 이전 : 명령 줄 "Gradle을 테스트"나는이 방법을 시도해야

에서 실행할 때 제로를 얻을.
2. queryForObject를 세 번 실행하고 마지막 결과를 테스트하십시오.
모두 실패했습니다.이 문제를 해결할 수있는 사람은 누구입니까? 고맙습니다.

답변

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를 수정하는 테스트 사례를 제거합니다.

관련 문제