1

JavaSwingGUIで単体テストを実行するためにFESTを使い始めました。

今のところ、私はなんとかドキュメント(ほとんどが非推奨)を通り抜け、Javadocとコードを見て助けてくれました。

現在、NoExitSecurityManagerを使用しているときに問題が発生します。ドキュメントはかなり古くなっていますが、その大きな線を理解することができます。

「Quit」MenuItemがGUIで正常に機能しているかどうかをテストしようとしています。したがって、System.exit(0)をブロックし、プログラムの終了ステータスをJUnitテストにマップする必要があります。

これは、テストを実行するために使用する簡略化されたコードです(テストされたクラスはですGraphicalUserInterface)。

import org.junit.Test;
import org.junit.AfterClass;
import org.junit.BeforeClass;

import org.fest.swing.annotation.RunsInEDT;
import org.fest.swing.edt.GuiQuery;
import org.fest.swing.edt.GuiActionRunner;
import org.fest.swing.fixture.FrameFixture;
import org.fest.swing.junit.testcase.FestSwingJUnitTestCase;
import org.fest.swing.security.NoExitSecurityManagerInstaller;


public class GraphicalUserInterfaceTest extends FestSwingJUnitTestCase {

    private static FrameFixture gui;
    private static NoExitSecurityManagerInstaller noExitSecurityManagerInstaller;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception { 
             NoExitSecurityManagerInstaller.installNoExitSecurityManager(new ExpectExitSuccess());
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception { 
             noExitSecurityManagerInstaller.uninstall();
    }

    @Override
    protected void onSetUp() {
            gui = new FrameFixture(robot(), createNewGUI());
            gui.show();
    }

    @RunsInEDT
    private GraphicalUserInterface createNewGUI() {
             return GuiActionRunner.execute(new GuiQuery<GraphicalUserInterface>() {
                    protected GraphicalUserInterface executeInEDT() {
                       return new GraphicalUserInterface();
                    }
         });
    }

    @Test
    public final void testFileMenuQuitMenuItem() {
           gui.menuItemWithPath("File", "Quit").click();
    }

}

ExitCallHookはこのようにコーディングされています(もう一方は簡単に推測できます)。

import static org.junit.Assert.assertTrue;

import org.fest.swing.security.ExitCallHook;

public final class ExpectExitSuccess implements ExitCallHook {

    @Override
    public void exitCalled(int status) {
           assertTrue(status == 0);
    }
}

すべてのテストは正常に実行され、最後にjava.lang.NullPointerExceptionが発生することを除いて、すべて問題ないようです。

だから、私は何を間違えたのだろうか(またはテストの最後にこのnullpointer例外を受け取らないように何を改善できるのか)。

4

1 に答える 1

1

コードで解決策を見つけました。実際、それを行う適切な方法は次のとおりです。

 @Test
 public final void testFileMenuQuitMenuItem() {
     NoExitSecurityManagerInstaller noExitSecurityManagerInstaller = 
        NoExitSecurityManagerInstaller.installNoExitSecurityManager(new ExpectExitSuccess());

     gui.menuItemWithPath("File", "Quit").click();

     noExitSecurityManagerInstaller.uninstall();
 }

このようにして、各テストが NoExitSecurityManager で汚染されるのを防ぎます。

于 2013-02-15T10:32:10.147 に答える