Spring引导单元测试

时间:2017-11-02 08:49:00

标签: java rest spring-boot spring-data-jpa jhipster

在jhipster示例Spring启动应用程序(https://github.com/jhipster/jhipster-sample-app)中,删除测试是这样的:

@Test
@Transactional
public void deleteBankAccount() throws Exception {
    // Initialize the database
    bankAccountRepository.saveAndFlush(bankAccount);
    int databaseSizeBeforeDelete = bankAccountRepository.findAll().size();

    // Get the bankAccount
    restBankAccountMockMvc.perform(delete("/api/bank-accounts/{id}", bankAccount.getId())
        .accept(TestUtil.APPLICATION_JSON_UTF8))
        .andExpect(status().isOk());

    // Validate the database is empty
    List<BankAccount> bankAccountList = bankAccountRepository.findAll();
    assertThat(bankAccountList).hasSize(databaseSizeBeforeDelete - 1);
}

我想通过执行新的get并检查404错误来进行进一步的验证。但我有奇怪的结果(可能是由于交易效应)。 删除项目#1后,如果我在测试中执行此操作:

 bankAccountRepository.findAll() // item 1 is not present => OK

 bankAccountRepository.findOne(1) // item 1 is present => BAD

 restBankAccountMockMvc.perform(get("/api/bank-accounts/{id}", bankAccount.getId())) // HTTP code 200 => BAD

我不明白为什么findAll会返回没有已删除项目的列表,但findOne会返回已删除的项目。

我怎么能有这个?

 bankAccountRepository.findOne(1) // null

 restBankAccountMockMvc.perform(get("/api/bank-accounts/{id}", bankAccount.getId())) // HTTP code 404

注意:我没有从jhipster项目启动我的应用程序,我只是查看生成的代码以获得好的想法。所以我从一个空的maven / spring-boot项目开始我的项目。

1 个答案:

答案 0 :(得分:1)

您使用了错误的ID作为断言,即您正在删除不是1的bankAccount.getId(),因为在测试设置中创建了BankAccount。您还应该使用与搜索相同的ID进行搜索:bankAccount.getId()