我想对NatTable内容进行纯粹的UI测试(即不使用SWTBot或其他UI测试框架)。NatTable的JUnit测试
我的方法是创建一个外壳,加上我的自定义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)
}
为了测试我的其他组件这就足够了创建shell和父级组合;包装和设置可见不需要我的测试工作。 然而,如果单元格不可见,那么使用NatTable,getCellByPosition()
将返回null
- 所以我添加了代码来打包并设置外壳可见。这适用于小型表格(2行和几列)。
不幸的是,它不适用于大型表格。我怀疑这是因为视口图层不会创建不在可见区域中的单元格(我知道,这是NatTable的优势 - 它只根据需要创建所需的结构)。当然,这对于正常运行时行为来说是期望的。
但是有没有一种方法可以保证获得细胞(换句话说,我可以让NatTable/ViewportLayer相信细胞是可见的,所以我不会得到null
,只要细胞是否存在内容明智吗?)
我当然可以直接测试我的标签累加器,数据提供者等,但我想从黑盒子的角度来看这里。
我没有回答你的问题,但通常的建议是保持最顶层的视图/用户界面层尽可能薄和笨,并测试其他一切。在你的情况下,它确实意味着测试你的单独的NatTable组件(Accumulators,Providers,Event Handler),并且信任NatTable来正确显示它。 – jhyot