YES
私は、ユーザーが選択するかNO
、から選択することを期待するJavaSwingアプリケーションを持っていますJOptionPane.showConfirmDialog
JOptionPaneはスレッドを停止し、ユーザー入力を待機しているため、私のコードは自動的にテストできません。
とにかく私はこれをプログラムで回避することができますか?または、はいまたはいいえをシミュレートしますか?
今の私のテストでは、確認ダイアログが表示され、[はい]または[いいえ]ボタンを押す必要があります。
アップデート
素晴らしいオプションを見つけました。
OptionPane
基本的に必要なすべての種類のメッセージで呼び出されるインターフェイスを作成しました。次に、JOptionPaneの静的メソッドに委任するだけのデフォルトの実装を作成しました。次に、YesMockOptionPaneを作成しました。これは、基本的にすべての確認メッセージに対してYES_OPTIONを返し、すべてのNO_OPTIONSに対してNoMockOptionPaneを返します。
コードは次のとおりです。
<<usage>>
class Foo {
OptionPane optionPane = new DefaultOptionPane();
public void someMethod() {
if (optionPane.showConfirmDialog(null, "choose yes or no", "Please confirm",
JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION)
return;
//User pressed yes
}
public void setOptionPane(OptionPane o) {
this.optionPane = o;
}
}
//Snippet of the interface
public interface OptionPane {
int showConfirmDialog(Component parentComponent,
Object message, String title, int optionType);
}
public class DefaultOptionPane implements OptionPane {
@Override
public int showConfirmDialog(Component parentComponent,
Object message, String title, int optionType) {
return JOptionPane.showConfirmDialog(parentComponent,message,title,optionType);
}
}
public class YesMockOptionPane extends DefaultOptionPane {
//MockOptionPane is just an abstract class implementing default methods from OptionPane
@Override
public int showConfirmDialog(Component parentComponent, Object message, String title, int optionType) {
return JOptionPane.YES_OPTION;
}
}
これで、単体テストで適切なMockOptionPaneを設定するだけで済みます。
dialog.setOptionPane(new YesMockOptionPane());