我想對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