0

스프링 부트 및 스프링 데이터 나머지를 사용하여 데이터 리포지토리를 노출합니다.스프링 부트 및 스프링 데이터 나머지 통합 테스트가 데이터를 유지하지 못함

내가 작성한 통합 테스트는 데이터베이스에 사용자를 추가 한 다음 rest 메서드를 호출하여 사용자를 나열합니다. 그러나 추가 된 사용자는 나열되지 않습니다.

ApplicationRunner는 DB에 데이터를 채우는 데 사용되며 다른 데이터베이스에는 Spring 프로필을 사용하고 있습니다. 내 시험에 대한 예를 들어

:

spring: 
    profiles: unittest 
    datasource: 
    url: 'jdbc:h2:mem:MYDB;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE' 
    driver-class-name: org.h2.Driver 
    username: myname 
    password: mypassword 
    jpa: 
    show-sql: true 
    hibernate: 
     ddl-auto: create-drop 
    jpa: 
    hibernate: 
     dialect: org.hibernate.dialect.H2Dialect 

단위 테스트 :

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 
@ActiveProfiles("unittest") 
@AutoConfigureTestEntityManager 
@Transactional 
public class MyUserRepoIntegrationTest { 
    private static Logger log = Logger.getLogger(MyUserRepoIntegrationTest.class); 
    // 3 default users + "test" 
    private static final int NUM_USERS = 4; 

    @Autowired 
    private TestRestTemplate restTemplate; 
    @Autowired 
    private TestEntityManager entityManager; 

    @Before 
    public void setupTests() { 
    entityManager.persistAndFlush(new MyUser("test", "test")); 
    } 

    @Test 
    public void listUsers() { 
    ResponseEntity<String> response = restTemplate.withBasicAuth("user", "user").getForEntity("/apiv1/data/users", String.class); 
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); 
    assertThat(response.getBody()).contains("\"totalElements\" : "+NUM_USERS); 
    } 
} 

마지막 주장은 항상 실패합니다. DB에는 UserRepository를 통해 ApplicationRunner가 추가 한 사용자가 3 명뿐입니다. TestEntityManager 대신 userRepository를 사용하고 사용자를 테스트 메서드 자체에 추가하려고했지만 아무 것도 변경되지 않았습니다.

H2를 사용하고 있으며 프로덕션 DB가 아니라는 것을 확인했습니다.

편집 :

가까이 검사시, 데이터가 실제로 데이터베이스에 가져옵니다. UserRepository를 삽입하고 .count()를 호출하면 NUM_USERS (4)가 표시됩니다.

REST 응답에 새 사용자가 포함되어 있지 않기 때문에 문제는 아마 Spring Data REST에있다. 또한 기존 사용자를 수정하고 flush()를 명시 적으로 호출했지만 응답은 여전히 ​​동일합니다. POM에서 'spring-boot-starter-cache'를 제거하고 spring.cache.type = none을 'unittest'프로필의 application.yml에 추가했지만 행운은 없습니다.

+0

설치 방법이 아닌 테스트 방법을 추가하는 사용자를 이동 시키려고 했습니까? – davidxxx

+0

예, 두 번째 문장에서 마지막 문장까지 씁니다. –

답변

0

지금 UserRepository를 사용하여 데이터를 추가하고 TestEntityManager를 완전히 제거했습니다. 이제 작동 ...