私は OS X で SWT ベースのアプリケーションに取り組んでおり、SWT イベント ループのポンピングが必要であるが、必ずしもGUI。私は多くの問題に直面しています。
いくつかのトラブル コードの要約例: 次のパターンに大まかに基づいて、小さな反復 SWT タイマー ユーティリティがあります。
public class RepeatingSWTTimer
{
private boolean isRunning = false;
private RepeatingSWTTimerAction timerAction;
private int delay;
private Runnable timerRunnable = new Runnable()
{
@Override
public void run()
{
timerAction.fire();
if(isRunning)
{
Display.getCurrent().timerExec(delay, this);
}
}
};
public void start()
{
isRunning = true;
Display.getCurrent().timerExec(delay, timerRunnable);
}
}
コードは問題なく動作し、実際のクラスには 1 つのメソッドだけでなく、さらに多くのメソッドがあり、アプリケーションの多くの場所で問題なく使用しています。しかし、それでもテストケースでカバーしたいと思います。
私が抱えている主な問題は次のとおりです。
インスタンス化された Display がない場合 ( の呼び出しなど)、
Display.getDefault()
はNull ポインタを返します。@BeforeClass
Display.getCurrent()
インスタンス化された Display があり、ボイラープレート ループ コード (
while(!shell.isDisposed())...
など) がない場合、イベント ループは基礎となるネイティブ システムによってポンピングされないようです。で単純なシェルを開くと
@BeforeClass
、JUnit テスト ケースがブロックされます。シェルを閉じるまで実行されないため、元の問題に戻ります。-XstartOnFirstThread
これはOS Xの要件によるものだと思います。
SWTBot
SWT を使用した自動GUIテスト用のツールがあることは知っていますが、GUI 以外のユーティリティ コードをカバーするには、いくつかの単純な JUnit ケースが必要なだけです。
誰かがこのようなことを経験したことがありますか?