为什么我们在 Assertj Swing 测试中偶尔会失败?

2023-12-07

我们使用 Assertj Swing 3.9.2 进行的 GUI 单元测试有时会以难以重现的方式失败。有时整个测试套件是绿色的,有时某些测试用例失败。我们使用两台不同的机器,运行 Ubuntu 18.04 LTS 和 GNOME,并且遇到相同的错误。

抛出的异常有两个,并且在不同的测试用例中不时出现:

  • org.assertj.swing.exception.ComponentLookupException
  • org.assertj.swing.exception.WaitTimedOutError

给我们带来麻烦的是,这种行为似乎完全是随机的,并且测试套件的行为取决于以下因素:

  • 从 Eclipse 执行,Eclipse 作为完整窗口。
  • 从 Eclipse 执行,Eclipse 占据屏幕的一小部分(因此从测试创建的窗口不会与 Eclipse 本身或其他窗口重叠)。
  • 从 Maven 执行。
  • 执行单个测试用例或整个套件。

此外,多次重新运行相同的测试可能会在不同的测试用例中导致失败或成功。

Travis-Ci 上的测试也失败了。

作为附加信息,我们可以将其包括在内ComponentLookupException,未找到的组件实际上显示在屏幕上,但组件层次结构是空的,如 Travis 构建的摘录所示:

...

970 org.assertj.swing.exception.ComponentLookupException: 
971 Unable to find component using matcher org.assertj.swing.core.NameMatcher[name='labelTextField', type=javax.swing.text.JTextComponent, requireShowing=true].
972
973 Component hierarchy:
974 apt.project.frontend.view.swing.CustomDialog[name='dialog1', title='', enabled=true, modal=false, visible=true, showing=true]
975
976 at apt.project.frontend.view.swing.CustomDialogTest.testWhenOkButtonIsClickedThenInputIsSavedBeforeClosing(CustomDialogTest.java:62)

...

至于WaitTimedOutError例外,当测试失败时,这是因为该组件实际上并未显示在屏幕上(窗口实际上并未出现)。

您可以进一步检查错误日志和代码本身wiew.swing包在我们的GitHub 存储库 and in 这个特拉维斯构建

我们无法理解这些问题的原因,因为它们看起来完全是随机的。

这是一种已知的行为还是我们已经实施了测试(课程小组测试, 自定义对话框测试)以错误的方式?


我从 Travis-CI 日志中看到您正在使用 Xvfb。我使用它时遇到了类似的问题。按照 AssertJ 的建议切换到 VNC (https://joel-costigliola.github.io/assertj/assertj-swing-running.html)修复了它们。

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

为什么我们在 Assertj Swing 测试中偶尔会失败? 的相关文章

  • 将键与多个值对象关联的有效集合[重复]

    这个问题在这里已经有答案了 有任何有效的集合可以将键与多个值关联起来 例如 new HashMap
  • Java 7u51/7u55 带星号的清单变量

    我正在部署一个小程序 其中包含清单中的下一个变量 Manifest Version 2 0 Ant Version Apache Ant 1 8 2 Trusted Library true Permissions all permissi
  • selenium 2.0 中的 isElementPresent

    大家好 我正在使用 webdriver 所以如果我想使用 selenium s rc 函数 isElementPresent 我必须模拟 selenium rc 所以我会执行以下操作 import org openqa selenium B
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • 使用 SSL 和代理设置的 Rest 客户端获取连接超时

    我正在使用带有忽略 ssl 的 Rest 客户端 它工作正常 但在将来我尝试使用客户端证书进行的生产中将无法工作 我有 ca 证书和客户端证书 我用它创建了一个客户端 但我收到错误 Exception in thread main com
  • 参考接口创建对象

    引用变量可以声明为类类型或接口类型 如果变量声明为接口类型 则它可以引用实现该接口的任何类的任何对象 根据上面的说法我做了一个理解上的代码 正如上面所说声明为接口类型 它可以引用实现该接口的任何类的任何对象 但在我的代码中显示display
  • 使用 Microsoft REST API - Java 将 Xbox-Live GamerTag 转换为 XUID

    我有一个 Java 应用程序 它需要能够获取用户输入的 Minecraft Bedrock Edition 玩家标签 并将其转换为给定帐户的 XUID 以便我可以将其存储起来以供稍后列入白名单和参考目的 我一直在浏览 Microsoft R
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

    示例代码 import subprocess subprocess call java jar temp jar 如何在上面的命令中指定JAVA OPTS 当我使用上述命令时 我收到 java lang OutOfMemoryError 无
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • 单元测试内存泄漏

    我有一个应用程序存在大量内存泄漏 例如 如果打开一个视图并关闭它 10 次 我的内存消耗会增加 因为视图没有完全清理 这些是我的内存泄漏 从测试驱动的角度来看 我想编写一个测试来证明我的泄漏 并 在修复泄漏之后 断言我修复了它 这样我的代码
  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • 有没有办法删除 JShell 中的导入?

    我正在发现 JShell 并且发现默认添加的导入 jshell gt imports import java io import java math import java net import java nio file import j
  • 使用 Retrofit 获取原始 HTTP 响应

    我想从我的 API REST 获取原始 http 响应 我尝试过这个界面 POST login FormUrlEncoded Call
  • 可空日期列合并问题

    我在 Geronimo 应用程序服务器上使用 JPA 和下面的 openjpa 实现 我也在使用MySQL数据库 我在更新具有可为空 Date 属性的对象时遇到问题 当我尝试合并 Date 属性设置为 null 的实体时 不会生成 sql
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez

随机推荐

  • 如何从文件中读取位?

    我知道如何读取字节 x read number of bytes 但是如何读取 Python 中的位呢 我必须从二进制文件中仅读取 5 位 而不是 8 位 1 字节 有什么想法或方法吗 Python 一次只能读取一个字节 您需要读取一个完整
  • 无需按 Control 键即可选择多行

    我有一个网格视图 可以通过按控制键选择多行 是否可以在不按控制键的情况下实现相同的目的 由于 net 默认操作也会更新slectedrows你的datagridview你需要有一个数组来保留旧的选择 DataGridViewRow old
  • Fragment 和 FragmentActivity 有什么区别?

    我的问题是除了明显的继承差异之外 两者之间的主要区别是什么Fragment and FragmentActivity 每个类别最适合什么场景 我试图了解为什么这两个类别存在 A Fragment是一个的一部分Activity 其中有 它自己
  • 按图像路径在数据库中的 RDLC 报告上显示图像

    图像路径存储在SQL Server 2008数据库中 在我的 RDLC 报告上 我有一个图像字段 我已设置此字段以从数据库中的数据库列获取图像路径 我还在报告查看器中将 EnableExternalImages 属性设置为 true 我不知
  • UIScrollView 滚动时取消 UIPageViewController 手势

    我有一个UIPageViewController它负责翻我的 书 的页面 然而 每一本书的页面都是一个ViewController with a UIScrollView as a subview The UIScrollView只能垂直滚
  • 使用 PHP 克隆 + 重命名文件

    如何使用 php ini 克隆并重命名文件 我需要采取 拇指 123 jpg Copy it 将其重命名为thumb 456 jpg 我可以很好地进行重命名rename 这是我没有得到的复制 copy thumb 123 jpg thumb
  • JQuery Slider,如何更改“步长”大小

    是否可以使用 JQuery 滑块 范围滑块 双滑块 来获得非线性 不一致的 步长 大小 值 我想要水平滑块看起来像 0 500 750 1000 1250 1500 2000 2500 75000 100000 例如 我想要以下 JQuer
  • Flink 应用程序的检查点大小持续增长

    我有这样的管道 env addSource kafkaConsumer name source keyBy value gt value f0 window EventTimeSessionWindows withGap Time seco
  • 如何将 git 存储库的副本(存档,而不是克隆)连接到其远程?

    我想知道如何将 git 存储库的副本 存档 而不是克隆 与其远程存储库连接并同步 背景 我有一个本地和远程存储库 我使用 git archive 压缩本地存储库 然后将其复制到服务器 git archive format tar HEAD
  • 使用 python 请求下载 *.gz 压缩文件会损坏它

    我使用此代码 它只是一部分 来下载 gz 存档 with requests session as s s post login to site URL payload load s get scene stream True with op
  • Rails 如何将参数从控制器传递到模型内的 after_save

    我有一个 Rfq 控制器 我正在创建新的或更新现有的 Rfq 当我创建或更新保存对象时 我想要的是因为我有引号参数的数量 所以我想使用 params quotes 中的引号更新 line items 表 保存询价后在 quote price
  • LoadViewState 未在我的用户控件上触发

    我有一个嵌套在中继器中的用户控件 在我的用户控件中 我有另一个中继器 其中有一个面板 我试图重写用户控件的 LoadViewState 事件并将控件动态添加到面板 我想在 LoadViewState 中执行此操作 以便在加载视图状态之前添加
  • Wso2IS 跳过authenticationendpoint/login.do

    使用 java 客户端 我生成了 SAMLRequest 字符串有没有办法发布整个数据 并跳过 IdentityServer 登录页面 我传递的数据必须满足SSO的身份验证 然后生成Oauth2 Token 您可以使用请求路径认证并在同一请
  • Webhook 进程在另一个 goroutine 上运行

    我想在另一个 goroutine 中运行一些缓慢的例程 这样做安全吗 func someHandler w http ResponseWriter r http Request go someReallySlowFunction sendi
  • 如何用代码更改android中的锁屏壁纸? [复制]

    这个问题在这里已经有答案了 我可以更改主屏幕壁纸 但无法更改锁屏壁纸 DisplayMetrics metrics new DisplayMetrics getWindowManager getDefaultDisplay getMetri
  • 如何删除 Coding Fun 消息提示中的边框

    我按照这个示例在 Coding4Fun MessagePrompt 中显示我的用户控件 http windowsphonegeek com articles Creating a Windows Phone 7 Trial Applicat
  • 使用 pygame 生成并绘制正弦波

    我正在尝试生成并绘制正弦波 我正在使用我在网上找到的这个公式y Amp sin 2 PI frequency time shift import pygame import math import time window pygame di
  • ggplot2和地图:geom_point和annotation_raster位置不匹配

    今天是个好日子 使用下面的代码我可以使用以下命令成功地从 Google 检索栅格ggmap 绘制一个annotation raster using ggplot2 并将站点位置绘制为栅格图层顶部的红点 在绘图上 位置不太匹配 它们应该沿着海
  • 建议初始化数组(或其他对象)的最佳方法

    我对以下两种初始化方式有点困惑 Way 1 void myMethod NSArray myArray NSArray alloc initWithObjects obj1 obj1 nil self setClassArray myArr
  • 为什么我们在 Assertj Swing 测试中偶尔会失败?

    我们使用 Assertj Swing 3 9 2 进行的 GUI 单元测试有时会以难以重现的方式失败 有时整个测试套件是绿色的 有时某些测试用例失败 我们使用两台不同的机器 运行 Ubuntu 18 04 LTS 和 GNOME 并且遇到相