SwingUnitメモ

SwingUnitを使ってみた。けっこうハマったのでメモ。

基本的な考え方

  • ウィンドウとコンポーネントにはsetNameで名前を付ける
  • ifはあるけどnotやelseは無いのでシナリオの中での異常検出は決め打ちでないと無理
  • シナリオ実行→JUnit側で判定の繰り返し
  • シナリオを実行できなかったときにエラーになる
  • エラーが出た瞬間のSSを撮ってくれるがタイミングが合わないこともある
  • ownerが不可視のJDialogではJComboBoxのpopup選択は使えない
  • System.exitを使うとJUnitごと落ちるので使わないようにする
  • Dialog類はコンストラクタでブロックするとJUnit側で値を取れないのでコンストラクタを終わらせてから別メソッドでブロックさせる
  • JOptionPaneの中のメッセージは1行1ラベルになっている
  • documentタグやscenarioタグの属性値は下位にある要素のデフォルト値になる

シナリオ記述例

  • FOO_DIALOGのOK_BUTTONという名前のボタンを押す
<Click name="OK_BUTTON" componentClass="JButton" windowName="FOO_DIALOG" windowClass="JDialog" />
  • タイトルが"hoge"のJOptionPaneのOKボタンを押す
<OptionPane title="hoge" label="OK" />
  • タイトルが"hoge"のJOptionPaneの[はい]ボタンを押す
<OptionPane title="hoge" optionType="YES_BUTTON" />
  • FOO_DIALOGのHOGE_TEXTというJTextFieldをクリックして「ほげほげ」と打つ(全角文字が入ってるのでクリップボードを使う必要がある)
<Click name="HOGE_TEXT" componentClass="JTextField" windowName="FOO_DIALOG" windowClass="JDialog" />
<SetClipboard text="ほげほげ" />
<Paste />
  • FOO_DIALOGのHOGE_TEXTをダブルクリック(テキスト選択)
<Click name="HOGE_TEXT" clickCount="2" componentClass="JTextField" windowName="FOO_DIALOG" windowClass="JDialog" />
  • JOptionPaneのラベルの中の1行が「ほげほげ」かどうかをチェックする
<VerifyText label="ほげほげ" text=".*" isRegularExpression="true" componentFinder="CLASS_IS_EQUAL_AND_LABEL_MATCHES" componentClass="JLabel" windowFinder="CLASS_IS_EQUAL_STRICTLY" windowClass="JDialog" />
  • FOO_DIALOGの中のTAB_PANEという名前のタブペインのタブインデックスを1にする(タブ切り替え)
<Tab tabIndex="1" name="TAB_PANE" windowName="FOO_DIALOG" windowClass="JDialog"/>