TestFx - 如何测试 javaFx MenuItems
TestFx - How to test javaFx MenuItems
因为 MenuItem 不是节点,所以我无法查找它。如果某些 MenuItem 被禁用,我该如何测试?
我试图查找它,因为它是一个节点,它返回了一些东西,看起来像这样..
(返回对象的 toString 表示):
(ContextMenuContent$MenuItemContainer[id=mnEditHrom, styleClass=menu-item])
但是我不能在上面使用 MenuItem,它说 "Node cannot be converted to MenuItem" 当我对返回的内容调用 isDisabled() 函数时,我得到了不正确的信息。
假设我有一个 ID 为 "mnEdit" 的 MenuItem,它已被禁用。当我打电话时
find("#mnEdit").isDisabled();
它 returns 错误。查找方法如下所示:
public <T extends Node> T find(String query)
{
return (T) lookup(query).queryAll().iterator().next();
}
那么,如何在 testFx 中测试某些 MenuItem 是否被禁用?
我通过查找 MenuBar 解决了这个问题,通过它的 Id 识别我想测试的项目,因为我现在手头有 MenuItem obejct,我可以在上面调用 isDisable()。
MenuTest.class
CommonTests common = new CommmonTests();
@Test
public void disabledMenuItemTest()
{
common.disabledMenuItemTest("#mainMenu", "mnEditHrom", true);
}
CommonTests.class
TestUtils utils = new TestUtils();
public void disabledMenuItemTest(String menuBarSelector, String menuItemId, boolean expected)
{
Boolean actual = utils.isMenuItemDisabled(menuBarSelector, menuItemId);
if (actual != null)
assertEquals("MenuItem "+menuItemId+" je enabled/disabled (expected = "+expected+").", expected, actual.booleanValue());
else
fail("MenuBar/MenuItem not found.");
}
TestUtils.class
public Boolean isMenuItemDisabled(String menuBarSelector, String menuItemId)
{
ArrayList<MenuItem> list = getAllMenuItems(menuBarSelector);
Boolean disabled = null;
if(list != null)
{
for(MenuItem item : list)
{
if(item.getId() != null && item.getId().equals(menuItemId))
return item.isDisable();
}
}
return disabled;
}
private ArrayList<MenuItem> getAllMenuItems(String menuBarSelector)
{
ArrayList<MenuItem> itemsList = new ArrayList<MenuItem>();
MenuBar menuBar = (MenuBar) find(menuBarSelector);
if(menuBar != null)
{
menuBar.getMenus().forEach(menu -> {
menu.getItems().forEach(menuItem -> {
itemsList.add(menuItem);
});
});
return itemsList;
}
return null;
}
原来你差不多完成了post。当您获得 MenuItemContainer
时,首先获得 MenuItem
最后调用 isDisable()
:
ContextMenuContent.MenuItemContainer actualMenuItemContainer = find("#mnEdit");
boolean actualResult = actualMenuItemContainer.getItem().isDisable();
因为 MenuItem 不是节点,所以我无法查找它。如果某些 MenuItem 被禁用,我该如何测试? 我试图查找它,因为它是一个节点,它返回了一些东西,看起来像这样..
(返回对象的 toString 表示):
(ContextMenuContent$MenuItemContainer[id=mnEditHrom, styleClass=menu-item])
但是我不能在上面使用 MenuItem,它说 "Node cannot be converted to MenuItem" 当我对返回的内容调用 isDisabled() 函数时,我得到了不正确的信息。
假设我有一个 ID 为 "mnEdit" 的 MenuItem,它已被禁用。当我打电话时
find("#mnEdit").isDisabled();
它 returns 错误。查找方法如下所示:
public <T extends Node> T find(String query)
{
return (T) lookup(query).queryAll().iterator().next();
}
那么,如何在 testFx 中测试某些 MenuItem 是否被禁用?
我通过查找 MenuBar 解决了这个问题,通过它的 Id 识别我想测试的项目,因为我现在手头有 MenuItem obejct,我可以在上面调用 isDisable()。
MenuTest.class
CommonTests common = new CommmonTests();
@Test
public void disabledMenuItemTest()
{
common.disabledMenuItemTest("#mainMenu", "mnEditHrom", true);
}
CommonTests.class
TestUtils utils = new TestUtils();
public void disabledMenuItemTest(String menuBarSelector, String menuItemId, boolean expected)
{
Boolean actual = utils.isMenuItemDisabled(menuBarSelector, menuItemId);
if (actual != null)
assertEquals("MenuItem "+menuItemId+" je enabled/disabled (expected = "+expected+").", expected, actual.booleanValue());
else
fail("MenuBar/MenuItem not found.");
}
TestUtils.class
public Boolean isMenuItemDisabled(String menuBarSelector, String menuItemId)
{
ArrayList<MenuItem> list = getAllMenuItems(menuBarSelector);
Boolean disabled = null;
if(list != null)
{
for(MenuItem item : list)
{
if(item.getId() != null && item.getId().equals(menuItemId))
return item.isDisable();
}
}
return disabled;
}
private ArrayList<MenuItem> getAllMenuItems(String menuBarSelector)
{
ArrayList<MenuItem> itemsList = new ArrayList<MenuItem>();
MenuBar menuBar = (MenuBar) find(menuBarSelector);
if(menuBar != null)
{
menuBar.getMenus().forEach(menu -> {
menu.getItems().forEach(menuItem -> {
itemsList.add(menuItem);
});
});
return itemsList;
}
return null;
}
原来你差不多完成了post。当您获得 MenuItemContainer
时,首先获得 MenuItem
最后调用 isDisable()
:
ContextMenuContent.MenuItemContainer actualMenuItemContainer = find("#mnEdit");
boolean actualResult = actualMenuItemContainer.getItem().isDisable();