【问题标题】:Testing conditions and exceptions in Integration Tests?集成测试中的测试条件和异常?
【发布时间】:2022-01-02 18:09:15
【问题描述】:

我已经编写了几个单元测试,现在转而在我们的 Java (Spring Boot) 应用程序中编写集成测试。我们使用 JUnit 和 Mockito 库进行测试。

据我所知,集成测试检查的是整个环而不是一个函数。但是,我很困惑,如果我还应该在集成测试时检查方法中的 if 条件。这是一个示例服务方法:

@Override
public CountryDTO create(CountryRequest request) {

    if (countryRepository.existsByCodeIgnoreCase(countryCode)) {
        throw new EntityAlreadyExistsException();
    }

    final Country country = new Country();
    country.setCode("UK");
    country.setName("United Kingdom");

    final Country created = countryRepository.save(country);
    return new CountryDTO(created);
}

我的问题是:

1.我可以为 Service 或 Repository 类编写集成测试吗?

2. 当我在上面的服务中测试 create 方法时,我想我只是在我的 Test 类中创建了正确的请求值 (CountryRequest),然后将它们传递给这个 create 方法,然后检查返回值。真的吗?还是我还需要测试 if 子句中的条件(countryRepository.existsByCodeIgnoreCase(countryCode))?

3. 当我测试 find 方法时,我认为我应该首先通过调用 create 方法来创建记录,而正确的位置是 @BeforeEach setup() {} 方法。这是真的吗?

【问题讨论】:

    标签: java spring-boot testing junit integration-testing


    【解决方案1】:
    1. 如果您编写的单元测试可以确保您的服务和存储库正常工作(例如通过验证和参数化测试),我相信您不必为它们编写集成测试。 您应该编写集成测试来检查您的应用程序的行为。通过测试您的控制器是否正常工作,您还将检查服务和 repo 是否正常。
    2. 我相信单元测试应该检查它。
    3. 你问是否应该在数据库中创建记录?如果您想测试存储库是否与服务和控制器正确通信,您必须使用一些数据来完成。

    【讨论】:

    • 感谢您的回复。关于你的答案,这是我的 cmets >>>
    • 1. 你的意思是我们应该为端点而不是服务编写集成测试吗?因为有时候服务中有额外的部分是不可用的Controllers?
    • 2.我们不需要在集成测试中检查异常条件吗?
    • 3. 是的,当然我在 H2 数据库中创建记录并删除以进行测试。因此,为了测试查找方法,我认为我应该首先在内存数据库中创建记录并从该数据库中检索它。这是真的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多