0

我正在使用春季啓動和春季數據休息來公開我的數據存儲庫。春季啓動和春季數據休息集成測試未能堅持數據

我編寫的集成測試將用戶添加到數據庫,然後調用其餘方法來列出用戶。但添加的用戶不在列表中。

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而不是我的生產數據庫。

編輯:

經仔細檢查,數據實際獲取到數據庫。當我注入UserRepository並調用.count()時,它給了我NUM_USERS(4)。

問題可能在於Spring Data REST,因爲REST響應不包括新用戶。我也嘗試修改一個現有的用戶並顯式調用flush(),但響應仍然是一樣的。 我已經從我的POM中刪除了'spring-boot-starter-cache',並在'unittest'配置文件中爲我的application.yml添加了spring.cache.type = none,但沒有運氣。

+0

您是否嘗試過移動用戶添加測試方法而不是設置方法? – davidxxx

+0

是的,寫在我的倒數第二句話中。 –

回答

0

我正在使用UserRepository來現在添加數據並完全刪除了TestEntityManager。它現在的作品...