【发布时间】:2016-08-21 15:44:49
【问题描述】:
我想对 NatTable 内容进行简单的 UI 测试(即不使用 SWTBot 或其他 UI 测试框架)。
我的方法是创建一个 shell,添加我的自定义 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,只要单元格是否存在内容?)
当然,我可以直接测试我的标签累加器、数据提供者等,但我想在这里更多地从黑盒的角度来解决这个问题。
【问题讨论】:
-
我没有你的问题的答案,但通常的建议是保持最顶层的 View/UI 层尽可能薄和愚蠢,并测试其他所有内容。在您的情况下,这确实意味着测试您的各个 NatTable 组件(累加器、提供程序、事件处理程序),并相信 NatTable 能够正确显示它。
标签: java junit swt eclipse-rcp nattable