我正在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黑盒测试"将是一个很好的谷歌搜索。