我如何从一个方法内测试JButton ActionListener ?(单元测试)



我正在Eclipse中创建一个棋盘游戏,并尝试进行单元测试。对于我的单元测试,我使用Junit和EclEmma。在一个类中,我试着测试,如果一个按钮(newGameButton)被按下,它会把玩家带到contentPane"player Details"。

下面是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被按下和什么测试写,以表明测试是成功的?

谢谢

我会把你的测试分成两个完全独立的部分。在GUI 下对代码进行单元测试,并使用类似WindowLicker的东西来驱动实际的UI。

您正在使用匿名内部类。这并没有错,尽管它很丑陋。然而,就TDD而言,错误之处在于它包含了对的不止一个调用,而是包含了封闭类的单个方法。如果您这样写,您可以轻松地单元测试方法,而不必按任何按钮;)

测试将断言在方法执行时预期发生的方法外围类的状态变化。因为这个方法是void的,所以你不能在单元测试中断言其他任何东西,真的。

更进一步,在按钮上执行的命令不必离拥有该按钮的UI组件很近(许多按钮实际上主要影响其他组件)。您只需要创建一个抽象来帮助您传递命令对象。如果你感兴趣,你可以看看这篇文章http://bo2framework.blogspot.gr/2013/08/bo2-concepts-part-1-service-panels.html

就测试GUI而言,您很可能需要一个用于黑盒测试的工具。不幸的是,我不熟悉Swing应用程序黑盒测试,但是"Swing黑盒测试"将是一个很好的谷歌搜索。

相关内容

  • 没有找到相关文章

最新更新