3

私は 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 つのメソッドだけでなく、さらに多くのメソッドがあり、アプリケーションの多くの場所で問題なく使用しています。しかし、それでもテストケースでカバーしたいと思います。

私が抱えている主な問題は次のとおりです。

  1. インスタンス化された Display がない場合 ( の呼び出しなど)、Display.getDefault()はNull ポインタを返します。@BeforeClassDisplay.getCurrent()

  2. インスタンス化された Display があり、ボイラープレート ループ コード (while(!shell.isDisposed())...など) がない場合、イベント ループは基礎となるネイティブ システムによってポンピングされないようです。

  3. で単純なシェルを開くと@BeforeClass、JUnit テスト ケースがブロックされます。シェルを閉じるまで実行されないため、元の問題に戻ります。-XstartOnFirstThreadこれはOS Xの要件によるものだと思います。

SWTBotSWT を使用した自動GUIテスト用のツールがあることは知っていますが、GUI 以外のユーティリティ コードをカバーするには、いくつかの単純な JUnit ケースが必要なだけです。

誰かがこのようなことを経験したことがありますか?

4

0 に答える 0