스프링 부트 및 스프링 데이터 나머지를 사용하여 데이터 리포지토리를 노출합니다.스프링 부트 및 스프링 데이터 나머지 통합 테스트가 데이터를 유지하지 못함
내가 작성한 통합 테스트는 데이터베이스에 사용자를 추가 한 다음 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에 추가했지만 행운은 없습니다.
설치 방법이 아닌 테스트 방법을 추가하는 사용자를 이동 시키려고 했습니까? – davidxxx
예, 두 번째 문장에서 마지막 문장까지 씁니다. –