我想对 NatTable 内容进行简单的 UI 测试(即,不使用 SWTBot 或其他 UI 测试框架)。
我的方法是创建一个外壳,添加我的自定义NatTable
,然后访问单元格并检查其内容(数据值、配置标签等):
// Note: this is Xtend code
@Before
def void setup()
{
shell = new Shell(Display.getCurrent)
shell.layout = new FillLayout
parent = new Composite(shell, SWT.NONE)
parent.layout = new GridLayout
fixture = new MyNatTableViewer(parent) // this is my custom nattable impl under test
shell.pack
shell.visible = true
}
@Test
def void testLabel()
{
assertCellLabel(2, 2, "test-label");
}
def assertCellLabel(int row, int col, String expected)
{
val labels = parameterTable.getCellByPosition(col, row)?.configLabels
assertThat(labels).describedAs("Labels for row " + row + " col " + col).isNotNull
assertThat(labels.labels).describedAs("Labels for row " + row + " col " + col).contains(expected)
}
要测试我的其他组件,只需创建外壳和父组合就足够了;我的测试不需要打包和设置可见。然而,使用 NatTable,如果单元格不可见,则getCellByPosition()
返回null
- 所以我添加了代码来打包并将 shell 设置为可见。这适用于小表(有 2 行和几列)。
可悲的是,它不适用于大桌子。我怀疑这是因为视口层不会创建不在可见区域中的单元格(我知道,这就是 NatTable 的优势——它只根据需要创建所需的结构)。当然,这是正常运行时行为所需要的。
但是有没有(另一种)方法可以保证以保证的方式获取单元格(换句话说,我可以让 NatTable/ViewportLayer 相信单元格是可见的,所以null
只要单元格在内容方面存在,我就不会得到? )
当然,我可以直接测试我的标签累加器、数据提供者等,但我想在这里更多地从黑盒的角度来解决这个问题。