我開始使用FEST來幫助我在Java Swing GUI上執行單元測試。FEST:如何正確使用NoExitSecurityManager?
現在,我設法通過了文檔(大部分已棄用),並通過查看Javadoc和代碼來幫助我。
現在我在使用NoExitSecurityManager時遇到問題。 documentation已經過時了,但我們可以理解它的大部分內容。
我只是試着測試我的「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之外,所有的測試都很好。
所以,我想知道我做了什麼錯誤的(或者我可以改進以在測試結束時不會得到這個空指針異常)。