我正在Eclipse中创建一个棋盘游戏并尝试进行单元测试。对于我的单元测试,我使用的是Junit和EclEmma。在一个班级中,我试图测试如果按下一个按钮(newGameButton),它将把玩家带到contentPane"玩家详细信息"。
以下是JButton代码的相关部分:
public void createGUI() {
JButton newGameButton = new JButton("New Game");
newGameButton.setToolTipText("Click to start a new game");
newGameButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout cardLayout = (CardLayout) contentPane.getLayout();
cardLayout.show(contentPane, "Player Details");
pack();
}
});
我的测试代码(在另一个类中)是:
@Test
public void testHomeButtonMainMenu()
{
appTest.createGUI();
appTest.newGameButton.doClick(); // I know this isn't correct, I'm trying to simulate newGameButton being pressed
Assert.assertTrue(); // somehow test that the game is on the player details
}
有没有人知道如何更正JButton newGameButton被按下的代码以及要写什么测试以显示测试成功?
由于
答案 0 :(得分:0)
我会将您的测试分成两个完全独立的部分。单元测试 GUI下的代码,并使用类似WindowLicker的内容来驱动实际的用户界面。
本书Growing Object Oriented Software: Guided By Tests将指导您完成此操作,以及如何将测试分解为更易于管理,并为您提供设计更加灵活的系统。
答案 1 :(得分:0)
您正在使用匿名内部类。这没有什么不妥,即使它很难看。然而,就TDD而言,有什么不对的是,它不仅仅包含对封闭类的单一方法的调用。如果你这样写,你可以轻松单元测试该方法,而无需按任何按钮;)
测试将断言方法执行时预期发生的方法的封闭类的状态更改。由于这种方法是无效的,所以你不能在单元测试中断言任何其他东西。
更进一步,在Button上执行的命令不必靠近具有该Button的UI组件(许多按钮,实际上主要影响其他组件)。您只需创建一个抽象来帮助您传递命令对象。如果您有兴趣,可以查看这篇文章http://bo2framework.blogspot.gr/2013/08/bo2-concepts-part-1-service-panels.html
就测试GUI而言,您很可能需要一个黑盒测试工具。不幸的是,我不熟悉Swing应用黑盒测试,但“摇摆黑盒测试”将是一个很好的谷歌搜索。