我做了一个游戏,用户和AI轮流使用#34;滚动"一个骰子。游戏自动转动AI并返回用户的回合。我使用JOptionPane.showMessageDialog弹出一个对话框,通知用户轮到他们了。所以这一切都正常工作但是当我执行一个JUnit测试类来测试hold()方法时,弹出窗口就出现了。有没有办法在JUnit Test类中禁止弹出窗口或自动关闭窗口?
public void hold() {
this.swapWhoseTurn();
this.setChanged();
this.notifyObservers();
if (this.getCurrentPlayer().getIsMyTurn() == this.getComputerPlayer().getIsMyTurn()) {
this.theComputer.takeTurn();
this.hold();
HumanPlayerPanel.turnAlert();
}
turnAlert是另一个名为HumanPlayerPanel的类中的静态方法。这是代码。
public static void turnAlert() {
JOptionPane.showMessageDialog(null, "It is your turn");
}
我看到我可以在OK_Option按钮上调用doClick方法,但我不太清楚如何找到该按钮。任何帮助表示赞赏。
答案 0 :(得分:0)
重构if语句如下:
if (this.getCurrentPlayer().getIsMyTurn() == this.getComputerPlayer().getIsMyTurn()) {
this.theComputer.takeTurn();
this.hold();
HumanPlayerPanel.turnAlert();
}
看起来像这样:
...
if (this.getCurrentPlayer().getIsMyTurn() == this.getComputerPlayer().getIsMyTurn()) {
this.theComputer.takeTurn();
this.hold();
alertHumanPlayer();
}
...
protected void alertHumanPlayer(){
HumanPlayerPanel.turnAlert();
}
让我们假设上面的类叫做Game。在您的测试代码中,按如下方式扩展Game类:
...
public class GameWithNoHumanAlert extends Game{
@Override
protected void alertHumanPlayer(){
// Do not show alert
// HumanPlayerPanel.turnAlert();
}
}
@Test
public void uiTest(){
GameWithNoHumanAlert game = new GameWithNoHumanAlert();
...
// Do your testing normally now.
}
<强> __ UPDATE __ 强>
另一个,恕我直言,更好的想法是使用mock testing。我亲自尝试了其中几个,我建议你看看Jmockit。用它来处理这种麻烦几乎是微不足道的,这样你就可以专注于你想要/需要测试的东西。
干杯。