首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FEST:如何正确使用NoExitSecurityManager?

FEST:如何正确使用NoExitSecurityManager?
EN

Stack Overflow用户
提问于 2013-02-15 02:21:40
回答 1查看 434关注 0票数 1

我开始使用FEST来帮助我在Java Swing上执行单元测试。

现在,我设法读完了文档(大部分已被弃用),并通过查看Javadoc和代码来帮助我。

现在我在使用NoExitSecurityManager的时候遇到了一个问题。documentation已经相当过时了,但我们可以理解它的大段内容。

我只是简单地测试一下我的“退出”MenuItem在我的图形用户界面中是否工作良好。因此,我需要阻塞System.exit(0)并将程序的退出状态映射到JUnit测试。

下面是我用来执行测试的简化代码(被测试的类是GraphicalUserInterface)。

代码语言:javascript
复制
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的代码是这样的(您可以很容易地猜到另一个)。

代码语言:javascript
复制
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。

所以,我想知道我做错了什么(或者我可以改进什么来避免在测试结束时出现这个空指针异常)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 18:32:10

我在代码中找到了解决方案。实际上,正确的方法是:

代码语言:javascript
复制
 @Test
 public final void testFileMenuQuitMenuItem() {
     NoExitSecurityManagerInstaller noExitSecurityManagerInstaller = 
        NoExitSecurityManagerInstaller.installNoExitSecurityManager(new ExpectExitSuccess());

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

     noExitSecurityManagerInstaller.uninstall();
 }

这样可以防止用NoExitSecurityManager污染每个测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14881473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档