Ale*_*ksa 2 java unit-testing spring-boot
我有一个服务:
@Service
@Transactional
@RequiredArgsConstructor
public class BookService {
private final BookRepository bookRepository;
public Book findOne(Long id) {
return bookRepository.findById(id).orElse(null);
}
public Book getOne(Long id) {
return bookRepository.findById(id)
.orElseThrow(() -> new BadRequestAlertException("entity-not-found", ("Entity with id: " + id + " not found!")));
}
public List<Book> getAll() {
return bookRepository.findAll();
}
public Book save(Book book) {
return bookRepository.save(book);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经为数据库(BookRepository)和控制器层(使用 BookService 的 BookController)编写了集成测试。我在任何地方都找不到服务层集成测试的示例。如果我正确编写单元测试,是否有为其编写集成测试的用例?据我所知(这不是规则,而是常见的用例):
好吧,你可以这样想……
为 编写单元测试毫无意义repositories,它们仅被集成测试覆盖。选择使用in-memory DBDocker 容器中的数据库或适当的数据库取决于具体情况,但通常我会选择 Docker 容器中的数据库,因为 H2(即使使用方言postgres)并不是Postgres数据库的完整副本。因此,测试可能会运行,但应用程序将在生产中崩溃。
对于controllers,您可能希望混合使用单元测试和集成测试。使用该类测试大多数控制器内容MockMvc。最关键的场景由集成测试覆盖,以测试整个垂直(3 层)功能切片。
现在我们进入services正题了。如果你的服务有复杂的业务逻辑,你想要验证它,那么它必须被单元测试覆盖,这样你就可以用很少的时间做大量的检查。此外,通过集成测试覆盖一些最基本的场景也是有意义的。具体来说,在您的情况下,服务层内的业务逻辑非常简单,因此我只进行集成测试。如果情况变得更复杂,您还可以添加一些单元测试,在其中模拟存储库类,以实现极快的测试时间,并能够进行大量检查,而不会减慢CI项目中每个人的流程。
一般来说,尝试始终遵循测试金字塔模式并使用Spring Boot 生态系统提供的最佳测试库。
| 归档时间: |
|
| 查看次数: |
2905 次 |
| 最近记录: |