当前位置: 首页 > 面试题库 >

如何改善我的junit测试

空英达
2023-03-14
问题内容

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

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

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

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

将如何改善


问题答案:

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

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

[caveat:尽管我可能只是



 类似资料:
  • 问题内容: 正确,我的junit测试看起来像是一个漫长的故事: 我创建了4位用户 我删除了1位用户 我尝试使用已删除的用户登录,并确保失败 我使用剩余的3个用户之一登录并确认我可以登录 我从一个用户向另一个用户发送一条消息,并验证该消息是否出现在发件人的发件箱和收件人的收件箱中。 我删除邮件 … … 优点 :测试非常有效(非常善于检测错误)并且非常稳定,因为它们仅使用API​​,如果我重构代码,那

  • 问题内容: 今天,我遇到了一个有趣的SQL问题,尽管我想出了一个行之有效的解决方案,但我怀疑这是最佳还是最有效的答案。在这里,我请专家- 帮助我学习一些知识并改善查询条件!RDBMS是SQL Server 2008 R2,查询是SSRS报告的一部分,该报告将针对约100,000行运行。 本质上,我有一个ID列表,该ID可能具有多个与之关联的值,这些值是Yes,No或其他字符串。对于ID x,如果任

  • 问题内容: 我正在研究一个使用Java Swing的项目。Java Swing GUI的默认外观非常无聊。有什么办法可以使我拥有更好的外观和感觉?网页上的东西… 问题答案: 您可以设置外观以反映平台: 如果这对您来说还不够好,请查看SWT for Eclipse。

  • 我使用JUnit实现了一些单元和集成测试,如下图所示(这些测试都在同一个类中) 我正试图在詹金斯建立一个管道,为此我在gradle中添加了这个任务。生成(没有筛选器,因为我想运行所有测试) 在我的Jenkins管道中,我添加了这个阶段“测试”。我需要在后台添加什么来运行测试?

  • 问题内容: 动机 最近,我在寻找一种无需向构造函数传递大量参数即可初始化复杂对象的方法。我使用了构建器模式进行了尝试,但是我不喜欢这样的事实,即如果我真的设置了所有需要的值,就无法在编译时检查。 传统建筑图案 当我使用构建器模式创建对象时,创建起来更“类型安全”,因为更容易了解参数的用途: 但是现在我有一个问题,我很容易错过一个重要的参数。我可以在方法中检查它,但这仅在运行时进行。如果我错过了一些

  • 我有许多可触摸的项目,使用TouchableOpacity制作它们,但问题是在应用程序中所有的按钮都变暗了,看起来不那么有吸引力。我使用原生反馈,在android中看起来很好,但在ios中很笨,有什么方法可以在不使用所有按钮和react native的振动api的情况下使ms振动?