FEST-SwingでGoos本を写経したときのwork-around
Goos本ではGUIのテスティングツールとしてwindowlickerを使用していますが、導入に際してビルドが通らず、写経のためだけに使うのも嫌だなということでFEST-Swingを使うことにしました。
ところが、FEST-Swingでは「ラベルに表示された文字列が変更されたらその文字列をチェックしろ」といったことはできません*1。
そこでとったwork-aroundのコードが下記になります(抜粋なのでこれだけでは動きません)。
public class AuctionSniperDriver { private FrameFixture fixture; // どこかで初期化する public void showsSniperStatus(String statusText) throws InterruptedException { for (int i=0; i<10; i++) { try { fixture.label().requireText(statusText); } catch (AssertionError ex) { if (i==10) throw ex; // リトライの上限に達したらテスト失敗と判断 Thread.sleep(200); // 200msのインターバルを設ける continue; // 失敗したらもう一度 } break; // テストに成功するとここに到達する } } }
つまり、requireText
が失敗すればAssertionError
が投げられるので、成功するか上限(ここでは2秒)に達するまでやり直すという方法になります。
200ms以内にラベルの文字列が変わってしまうことは、おそらくないという想定です。
誰向けの情報だよという感じですが、考えるのにちょっと時間がかかってしまったのでメモしておきました。
*1:windowlickerでどうしてるのか?ということを調べるの含めて、今後役に立たないだろうと思ってやっていません