我开始使用FEST来帮助我在Java Swing上执行单元测试。
现在,我设法读完了文档(大部分已被弃用),并通过查看Javadoc和代码来帮助我。
现在我在使用NoExitSecurityManager的时候遇到了一个问题。documentation已经相当过时了,但我们可以理解它的大段内容。
我只是简单地测试一下我的“退出”MenuItem在我的图形用户界面中是否工作良好。因此,我需要阻塞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。
所以,我想知道我做错了什么(或者我可以改进什么来避免在测试结束时出现这个空指针异常)。
发布于 2013-02-15 18:32:10
我在代码中找到了解决方案。实际上,正确的方法是:
@Test
public final void testFileMenuQuitMenuItem() {
NoExitSecurityManagerInstaller noExitSecurityManagerInstaller =
NoExitSecurityManagerInstaller.installNoExitSecurityManager(new ExpectExitSuccess());
gui.menuItemWithPath("File", "Quit").click();
noExitSecurityManagerInstaller.uninstall();
}这样可以防止用NoExitSecurityManager污染每个测试。
https://stackoverflow.com/questions/14881473
复制相似问题