gpt4 book ai didi

java - FEST:如何正确使用NoExitSecurityManager?

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:39 36 4
gpt4 key购买 nike

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

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

现在我在使用 NoExitSecurityManager 时遇到了问题。 documentation虽然已经过时了,但我们可以理解它的大意。

我只是尝试测试我的“退出”菜单项在我的 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 之外,一切似乎都正常。

所以,我想知道我做错了什么(或者我可以改进什么才能在测试结束时不出现此空指针异常)。

最佳答案

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

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

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

noExitSecurityManagerInstaller.uninstall();
}

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

关于java - FEST:如何正确使用NoExitSecurityManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14881473/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com