等待 JUnit 测试用例中测试的代码生成的所有线程

2024-02-21

如何确保在 JUnit 测试用例中,由被测方法直接/间接生成的所有线程都已完成该作业,以便我可以断言最终结果?

@Test
public void testMethod() {
 Result result=method();// may spawn multiple threads to set result.value

 Assert.assertTrue(result.getValue()==4); //should execute only after result.value is set to its final value.
}

真正的问题是,如何在非测试代码中处理这种情况? API有什么作用method()向调用者保证何时result.value将被设置?

在编写测试时请牢记这一点 - 目的是断言类及其方法的行为如其所宣传的那样。有时,弄清楚广告中的界面是什么可能是挑战的一半。

在这种情况下,我强烈建议您Result对象的行为就像Future,因为它的get()方法会阻塞,直到结果可用。 (或者,给它一个waitFor()方法或类似方法)。

如果您的方法没有提供任何特定的保证或阻止调用,您可以really测试中要做的就是不断检查该值x循环几秒钟,放置一个@Timeout进行测试以确保该值在“合理”时间内设置。但这也是客户端所能做的,所以

  1. 这是一个非常有效的测试;
  2. 它强调了该界面对于客户来说不太有用,修改它将是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待 JUnit 测试用例中测试的代码生成的所有线程 的相关文章

随机推荐

  • 背景:颜色在 IE8 中不起作用

    body background gray font family sans serif width 960px margin auto header background green border 10px solid black nav
  • 单词标记化与传统词形还原?

    我正在研究 NLP 预处理 在某些时候 我想实现一个上下文相关的词嵌入 作为辨别词义的一种方式 并且我正在考虑使用 BERT 的输出来实现这一点 我注意到 BERT 使用 WordPiece 标记化 例如 playing gt play i
  • Windows 7 64 位的 Moto G USB 调试问题

    我尝试搜索是否有任何建议 但找不到足够的建议 因此这个问题可以帮助我 我已经安装了 Motorola USB 驱动程序并启用了 USB 调试模式以及启用了 MTP 该设备在 Eclipse 中显示为可用状态不到一分钟 然后返回离线模式 我尝
  • iOS 应用内购买上的收据验证返回多笔交易

    沙盒模式下的应用内购买会返回同一产品 ID 上的多个交易 使用语言 Swift 4 0 func validateAppReceipt receipt Data let base64encodedReceipt receipt base64
  • 在 NativeScript 应用程序中与 TextField 交互时停止键盘覆盖

    使用用户可以输入输入的 NativeScript 应用程序视图时 本机应用程序键盘输入会覆盖TextField成分 虽然这不会阻止用户输入文本 但它会扰乱用户体验流程 并且从 UI 角度来看看起来很糟糕 如何让键盘不覆盖输入 而是像其他本机
  • SQL Server - 将变量传递给存储过程时遇到问题

    我知道这是一个基本问题 但我无法找到完成此任务的正确方法 我需要将变量传递给 SQL Server 2008 存储过程并返回查询 这是存储过程 CREATE PROCEDURE pOrders AS DECLARE enteredClien
  • 我可以在 Struts 中提供 SEO 友好的 url 吗?

    我想在我的应用程序中拥有 SEO 友好的 url 它将使用 Struts 1 2 在 java j2ee 中构建 我有一些分类如下 county countryname county state statename county state
  • PHP 如何发送原始 HTTP 数据包

    我想将原始 http 数据包发送到网络服务器并接收其响应 但我找不到方法来做到这一点 我对套接字缺乏经验 我发现的每个链接都使用套接字发送 udp 数据包 任何帮助都会很棒 看一下这个简单的例子fsockopen手册页 http docs
  • 动画元素替换[重复]

    这个问题在这里已经有答案了 请告诉我如何使容器根据子元素的高度平滑地增加和减少高度 我的代码可以在没有动画的情况下工作 setTimeout gt document getElementById page1 style display no
  • Selendroid 作为网络抓取工具

    我打算创建一个 Android 应用程序 该应用程序执行无头登录到网站 然后从后续页面中抓取一些内容 同时维护登录会话 我第一次使用HtmlUnit http htmlunit sourceforge net 在一个普通的 Java 项目中
  • 在 SQL 中,UPDATE 总是比 DELETE+INSERT 快吗?

    假设我有一个简单的表 其中包含以下字段 ID int 自增 身份 主键 名称 varchar 50 唯一 有唯一索引 Tag int 我从不使用 ID 字段进行查找 因为我的应用程序始终基于使用 Name 字段 我需要不时更改标签值 我正在
  • 检查字符串是否是从子字符串列表构建的算法

    给你一个字符串和一个字符串数组 如何快速检查该字符串是否可以通过连接数组中的某些字符串来构建 这是一个理论问题 出于实际原因我不需要它 但我想知道是否有一些好的算法 EDIT阅读一些答案我注意到 这可能是 NP 完全问题 即使找到字符串的子
  • 缓存 JSON:Apache、PHP、jQuery

    我正在尝试缓存由数据库中的 php 脚本生成的 JSON 内容 然而 数据集非常稳定 几乎没有变化或添加 这意味着数据可能会持续数周保持不变 问题是它包含一个 LOB 列 并且加载时间很长 与从文本文件提供 json 相比要长 这意味着 g
  • MSExchange URL 编码

    我正在编写一个 PHP 服务来通过 WebDAV 查询 Exchange 服务器 该服务已经上线大约一个月 没有出现任何问题 但今天遇到了一些问题 因为邮箱中收到了一封具有以下主题行的电子邮件 FW 每日审批报告 供应商 主 007297
  • SessionNotCreatedError: 会话未创建: 此版本的 ChromeDriver 仅支持 Chrome 版本 97 当前浏览器版本为 100.0.4896.75

    我正在尝试启动 selenium webdriver 实例 但出现此错误 SessionNotCreatedError session not created This version of ChromeDriver only suppor
  • 属性错误:“NoneType”对象没有属性“parent”

    from urllib request import urlopen from bs4 import BeautifulSoup html urlopen http www pythonscraping com pages page3 ht
  • 可以使用其他编程语言(python/C#)中的 Mathematica 吗?

    是否可以使用其他语言的 Mathematica 计算能力 我需要执行一些复杂的操作 顺便说一句 不一定是符号操作 如果能够直接从我的 python c 程序调用 Mathematica 的函数或运行 Mathematica 的代码 那就太好
  • 如何在rails 3.2.1中使用link_to和ajax

    我在用着轨道3 2 1 如何将 link to 与 remote gt true 一起使用 我在控制器中的方法 def clickme clk you click me respond to do format format js rend
  • Spring Boot 2 - 更改 Jar 名称

    我在 Gradle 项目中使用 Spring Boot 2 在 Jenkins 中构建 jar 我想更改该 jar 文件的名称 默认情况下 Spring Boot 2 使用 Gradle 属性rootProject name 可以在 set
  • 等待 JUnit 测试用例中测试的代码生成的所有线程

    如何确保在 JUnit 测试用例中 由被测方法直接 间接生成的所有线程都已完成该作业 以便我可以断言最终结果 Test public void testMethod Result result method may spawn multip