如何避免单元测试中的Thread.sleep?

2024-01-26

假设我有以下应该测试的方法:

@Autowired
private RoutingService routingservice;

public void methodToBeTested() {
    Object objectToRoute = initializeObjectToRoute();
    if (someConditions) {
         routingService.routeInOneWay(objectToRoute);
    } else {
         routingService.routeInAnotherWay(objectToRoute);
    }
}

在这种情况下RoutingService在单独的线程中运行,因此在它的构造函数中我们有以下内容:

Thread thread = new Thread(this);
thread.setDaemon(true);
thread.start();

问题是RoutingService改变的状态objectToRoute这正是我想要检查的,但这不会立即发生,因此测试失败。但是,如果我添加Thread.sleep()然后它就起作用了,但据我所知,这是不好的做法。

我怎样才能避免Thread.sleep()在这种情况下?


我建议等待性 https://github.com/awaitility/awaitility用于同步异步测试。例如,假设您有一个在一些线程操作后设置的结果对象,并且您想要测试它。你这样写声明:

 await()
.atMost(100, TimeUnit.SECONDS)
.untilAsserted(() -> assertNotNull(resultObject.getResult()));

它最多等待 100 秒,or直到断言得到满足。例如,如果 getResult() 在 0-100 秒内返回不为 null 的内容,则执行将继续,这与 Thread.sleep 不同,无论结果是否存在,Thread.sleep 都会在给定时间内保留执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免单元测试中的Thread.sleep? 的相关文章

  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 检索最后(最新)不同的最高值

    我想检索最新的requestid来自表 tbl 的报价提案 此处为特定客户 ID 3 在此示例中为 ID 2 和 ID 4 表 tbl 请求 请求 ID 客户 ID 6 2 7 4 8 3 9 3 Table tblquoteproposa
  • 读取整个文件并在lua中打印

    我是 Lua 的初学者 只有一点 C 经验 目前我正在使用 ZeroBrane Studio 作为 IDE 我正在尝试读取一个文件并将整个文件打印到控制台 如下所示 function readAll file local f io open
  • 在Spring Boot 2中,是否可以自动生成具有唯一约束的JoinTable?

    我正在使用 Spring Boot 2 和 PostGres 10 我创建了以下实体 角色和权限 Data Entity Table name Roles public class Role public enum Name USER AD
  • __NSArrayM insertObject:atIndex:];对象不能为零

    我是一个iOS开发新手 我想做加密和解密 我的问题如下 当我运行代码时 解密在模拟器中工作正常 但它无法在 iPhone 设备上运行 我收到如下错误消息 NSArrayM insertObject atIndex object cannot
  • 根据其他值添加列

    我有一个数据框 其中有数百万行和三列 标记为 关键字 展示次数 点击次数 我想添加一列 其中的值取决于此函数的评估 isType lt function Impressions Clicks if Impressions gt 1 Clic
  • 强制 Psych 将 YAML 映射读取为给定类的对象

    我有课Foo应该以最人性化的方式序列化为文本文件 我使用 Ruby 的默认 YAML Psych 和自定义encode with 我的问题是 如果我删除 ruby object Foo像这样 def encode with coder co
  • Azure Verizon CDN - 100% 缓存 CONFIG_NOCACHE

    几天前 我设置了 Azure Verizon Premium CDN 如下所示 Origin Azure Web 应用程序 NET MVC 5 网站 Settings 自定义域 无地理过滤 缓存规则 标准缓存 不关心参数 压缩 启用 优化用
  • 动态赋值给宏函数.pch文件和检查条件.pch文件

    pch 正如其名称所示 显示了预编译器标头 我在文件中定义了一个宏 以便应用程序可以在应用程序编译的一开始就决定 我需要的是 可以通过动态分配值来加载任何宏 例如NSUserDefaults并检查条件 pch文件本身 如果用户从屏幕 开关
  • Spring在运行时动态声明bean

    我想知道以下是否可能 出于测试目的 我希望在应用程序上下文中为不同的测试声明不同的模拟类 这些是使用 Jersey REST 客户端的验收测试 有没有办法在运行时动态声明bean Spring 是否有 API 允许在加载上下文后更改应用程序
  • Scala 异步/回调代码重写

    简单的代码应该通过检查用户 用户是否处于活动状态 然后更新上次登录日期时间 def authenticate Action async implicit request gt loginForm bindFromRequest fold e
  • C++ proc_open 模拟

    PHP 中有一个方便的函数 叫做proc open http php net manual ru function proc open php 它可用于调用可执行文件 打开其stdin stdout and stderr作为管道 这个函数在
  • 如何使用母版页在活动菜单项上设置 css 类?

    当我单击 ASP NET 母版页中的子菜单项或主项时 如何设置活动菜单项颜色 我的代码是 母版页源代码 ul class art menu li a href class span class l span span class r spa
  • GEKKO - 使用自定义目标函数进行参数估计 - 错误代码 -13

    我已经使用 Gekko 教程 线性和非线性回归 中介绍的相同技术成功地执行了稳态参数估计 下面是代码 coding utf 8 Spyder Editor This is a temporary script file from io im
  • WordPress:如何计算标签上的帖子数量

    我有个问题 如何计算某个标签的帖子数量 例子 标记照片 67 Thanks 使用下面的代码 taxonomy category can be category post tag or custom taxonomy name Using T
  • 单例类如何使用接口?

    我在很多地方读到单例可以使用接口 有些我无法理解这一点 每个类都可以实现一个接口 而 Singleton 只是一个 普通 类 它确保除了它可能实现的其他业务逻辑之外 在任何时间点都只存在它的一个实例 这也意味着 Singleton 至少有
  • 在 ColdFusion 中将文件保存到服务器

    经过一些研究后 我觉得这应该可行 但是它没有将文件保存到我的图像目录中
  • 消除 Ref# 参考不存在问题

    In the UpdateDemogInfoDA脚本中 我允许用户输入新信息 在另一个工作表 JBD 中捕获该信息 然后使用 示例数据 选项卡中的新信息覆盖旧信息 然后 当按下新的查找按钮时 将根据以下公式查找CustID填充 由于某种原因
  • 如何在 Bucardo Postgresql multi master 中处理序列

    我们正在三个不同的 Postgresql 服务器上设置一个数据库 将来可能会在更多服务器上 目前使用 bucardo 多主组同步所有表 我们不同步序列 我们尝试过 我们注意到当同时写入发生在不同服务器上的同一个表中时 布卡多会让我们丢失数据
  • 用户是否已经“喜欢”Facebook 帖子

    我已经尝试解决这个问题有一段时间了 并且慢慢意识到我拨打的电话并不是我想要的电话 我目前正在获取用户新闻源并添加一个 喜欢 按钮 但如果他们已经喜欢它 则应该说 不喜欢 我打电话给 me likes 并获得了一些数据 我通过比较新闻源中的每
  • 如何避免单元测试中的Thread.sleep?

    假设我有以下应该测试的方法 Autowired private RoutingService routingservice public void methodToBeTested Object objectToRoute initiali