0

我的任务是为在各种情况下 System.exit(1) 所需的实用程序应用程序设置一些 JUnit 测试,而系统规则非常适合测试它。该应用程序还可以在 GUI 模式下运行,它会弹出一个小的 JFrame。当它在应用了 ExpectedSystemExit 规则的 JUnit 测试的上下文中运行时,随着 JFrame 的构建,某些东西会偷偷地退出 jvm。关闭 ExpectedSystemExit 规则,测试正常运行,弹出 JFrame 就好了,只是我无法再测试 jvm exit()s。

一个猜测是,SecurityManager 系统规则 1.9.0 实施不允许某些权限。我仍在收集更多调试信息。在那之前,这个问题是否有已知的解决方案?

4

1 回答 1

0

setDefaultCloseOperation可以调用SecurityManager.checkExit验证exit。系统规则基于SecurityManager并将其解释为对exit. 这既会导致您的测试失败,也会导致无法构建您的 awt 窗口。

您必须在注册setDefaultCloseOperation之前创建您的窗口并调用。例如在方法中:ExpectedSystemExitSecurityManager@BeforeClass

@Rule
public ExpectedSystemExit exit = ExpectedSystemExit.none();

static JFrame frame;

@BeforeClass
public static void before() {
    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

@Test
public void test() {
    exit.expectSystemExitWithStatus(0);
    frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
于 2015-04-23T21:10:10.910 回答