2017-12-21 2 views
1

PostgreSQL 데이터베이스와 간단한 CRUD 서비스/저장소 (모두 스프링 부트 기반)에서 간단한 API 로딩 데이터를 얻었습니다. 나는 같은 서비스 레이어 내 생성/업데이트 방법을 표시 한 :Spring @ TransactionTimeout을 올바르게 테스트하는 방법

@Transactional(timeout=5) 
public void create(Entity x){ 
    ... 
    repository.save(x) 
} 

이 어떻게 (방법에 의해 통합 테스트)를 테스트 할 수 있습니다를 시간 제한 예외 아래에있는 상태가 발생 될 것이다? 내 리포지토리는 CrudRepository입니다. 당신은 시간 제한 값의 파라미터를하고 프로필을 통해 제공해야

뭔가

+0

트랜잭션 시간 초과를 테스트 할 필요가 없습니다. 그것은 시스템이 아닌 Spring 시스템의 일부입니다. – DwB

+0

@DwB 나는 당신의 의견을 가지고 있지만,이 게시물에 설명 된 모든 측면에 동의합니다 : http://the-music-of-time.blogspot.com.br/2012/10/writing-unit-tests- to-sure-your.html. 내 방법으로 설명하고있는 계약에 대해 생각하고이를 제거하는 것이 크게 바뀔 것입니다. – resilva87

답변

0

doTimeout(6000).when(repository).save(...)처럼, 당신의 통합 테스트에 테스트 값으로 설정합니다. 따라서 프로덕션 프로필에 프로덕션 값을 갖고 테스트 프로필에 값을 테스트 할 수 있습니다.

postgres.config: 
    timeout: 10 

그런 "${postgres.config.10:20}"timeout=5 교체 :

예를 들어, 프로파일에 application-test.yaml이 항목이 불렀다. 20은 응용 프로그램이 특정 프로파일없이 시작된 경우 기본값을 지정합니다.

관련 문제