一尘不染

如何改善我的junit测试

spring

我的junit测试看起来像是一个漫长的故事:

  • 我创建了4位用户
  • 我删除了1位用户
  • 我尝试使用已删除的用户登录,并确保失败
  • 我使用剩余的3个用户之一登录并确认我可以登录
  • 我从一个用户向另一个用户发送一条消息,并验证该消息是否出现在发件人的发件箱和收件人的收件箱中。
  • 我删除邮件

优点:测试非常有效(非常善于检测错误)并且非常稳定,因为它们仅使用API​​,如果我重构代码,那么测试也会被重构。由于我不使用“肮脏的技巧”,例如以给定状态保存和重新加载数据库,因此我的测试忽略了架构更改和实现更改。

缺点:测试变得难以维护,测试中的任何更改都会影响其他测试。测试运行8-9分钟,这对于持续集成非常有用,但对开发人员来说有点令人沮丧。测试不能孤立运行,最好的办法是在你感兴趣的测试运行后停止-但你绝对必须运行之前进行的所有测试。

将如何改善


阅读 411

收藏
2020-04-20

共1个答案

一尘不染

单元测试应该(理想情况下)应该是独立的,并且能够以任何顺序运行。因此,我建议您:

  • 分拆测试以保持独立
  • 考虑使用内存数据库作为测试的后端
  • 考虑将每个测试或套件包装在最后回滚的事务中
  • 对单元测试进行概要分析,以了解时间在哪里,并专注于此
    如果要花8分钟来创建几个用户并发送一些消息,则性能问题可能不在测试中,而可能是系统本身存在性能问题的征兆-只有您的分析器才能确定!

[caveat:尽管我可能只是

2020-04-20