IntelliJ IDEA中AssertJ测试Swing应用失败问题排查
问题:AssertJ Swing测试找不到组件,组件name属性为null
我在IntelliJ IDEA中开发了一个Swing应用,用AssertJ进行测试时报错,错误信息如下:
Unable to find component using matcher org.assertj.swing.core.NameMatcher[name='txtFirstName'
查看组件层级后发现所有字段的name属性均为null,这应该是报错原因。但我已在IntelliJ IDEA Swing可视化编辑器中正确设置了fieldName属性,不知如何解决该问题。组件层级信息如下:
Component hierarchy: javax.swing.JFrame[name='frame0', title='VT Institute', enabled=true, visible=true, showing=true] javax.swing.JRootPane[] javax.swing.JPanel[name='null.glassPane'] javax.swing.JLayeredPane[] javax.swing.JPanel[name=null] javax.swing.JTabbedPane[name=null, selectedTabIndex=0, selectedTabTitle='Students', tabCount=5, tabTitles=["Students", "Courses", "Enrollments", "Reports", "Utilities"], enabled=true, visible=true, showing=true javax.swing.JPanel[name=null] javax.swing.JTextField[name=null, text='', enabled=true, visible=true, showing=true] javax.swing.JTextField[name=null, text='', enabled=true, visible=true, showing=true] javax.swing.JTextField[name=null, text='', enabled=true, visible=true, showing=true] javax.swing.JTextField[name=null, text='', enabled=true, visible=true, showing=true] javax.swing.JTextField[name=null, text='', enabled=true, visible=true, showing=true]
我已查阅Stack Overflow类似问题,但均为组件不可见相关情况。
解决办法
别搞混fieldName和componentName:IntelliJ可视化编辑器里的
fieldName是生成Java类成员变量的名称,和Swing组件自身的name属性完全是两回事。AssertJ查找组件依赖的是component.setName()设置的属性,不是成员变量名。在可视化编辑器中设置组件name属性:
- 选中目标组件(比如你要找的JTextField)
- 打开右侧Properties面板,找到
name属性(注意不是fieldName),填入你要的标识名(比如"txtFirstName") - 保存后重新编译运行,此时组件层级里的name属性就会显示你设置的值
代码中手动补全设置:如果编辑器里找不到
name属性选项,直接在组件初始化代码里加一行:txtFirstName.setName("txtFirstName");把这行放在构造函数或者
initComponents()方法的末尾,确保组件初始化完成后执行。验证设置效果:重新运行应用后,用AssertJ的
printComponents()方法输出组件层级,确认目标组件的name属性已经正确赋值,再执行测试即可。
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

