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例外を受け取らないように何を改善できるのか)。