0

Я использую Spring Boot и Spring Data Rest для публикации моего хранилища данных.Тест интеграции интеграции весны и весны не удается сохранить данные

Тест интеграции, который я написал, добавляет пользователя в базу данных, а затем вызывает метод rest для списков пользователей. Но добавленный пользователь НЕ отображается.

ApplicationRunner используется для заполнения базы данных данными, и я использую профили 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); 
    } 
} 

Последнее утверждение всегда терпит неудачу. В БД есть только 3 пользователя, те, которые добавлены ApplicationRunner (через userRepository). Я попытался использовать userRepository вместо TestEntityManager и добавить пользователя внутри самого метода тестирования, но ничего не меняется.

Я проверил, что он использует H2, а не мою производственную БД.

EDIT:

При более близком рассмотрении, данные на самом деле попадает в базу данных. Когда я ввожу свой UserRepository и звоню .count(), он дает мне NUM_USERS (4).

Проблема, вероятно, связана с Spring REST, поскольку ответ REST не включает нового пользователя. Я также попытался изменить существующего пользователя и явно вызвать flush(), но ответ все тот же. Я удалил «spring-boot-starter-cache» из своего POM и добавил spring.cache.type = none в мое приложение application.yml для профиля «unittest», но не повезло.

+0

Вы пытались переместить пользователя в методе тестирования, а не в методе установки? – davidxxx

+0

Да, как написано в моем втором-последнем предложении. –

ответ

0

Я использую UserRepository для добавления данных сейчас и полностью удалил TestEntityManager. Он работает сейчас ...

Смежные вопросы