使用AssertJ在没有测试失败的情况下关闭应用程序

时间:2018-06-12 10:47:48

标签: java swing testing assertj

我使用AssertJ来测试我的swing应用程序。我必须在测试之后和下一次测试之前关闭我的应用程序,这将再次启动我的应用程序。但是,当我调用frame.close();System.exit(0);时,测试会以退出代码0崩溃。我尝试在测试之前使用此代码:

ApplicationLauncher.application(App.class).start();
    pause(8000);
    frame = WindowFinder.findFrame(FrameMatcher.withTitle("Application")).using(robot());
    try {
        frame.close();
    } catch (Exception e){
        e.printStackTrace();
    }
    ApplicationLauncher.application(App.class).start();
    pause(8000);
    frame = WindowFinder.findFrame(FrameMatcher.withTitle("Application")).using(robot());

但是,frame.close();之后我遇到了同样的问题。可能有人知道怎么做吗?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

org.assertj.swing.security.NoExitSecurityManagerInstaller可能是您的问题的答案。

在JUnit @BeforeClass方法调用中:

// to prevent system.exit from causing issues
org.assertj.swing.security.NoExitSecurityManagerInstaller.installNoExitSecurityManager();

//Then start the appplication
org.assertj.swing.launcher.ApplicationLauncher.application("your.main.application.class").start();

在JUnit @AfterClass方法调用中:

//After exiting your application uninstall the no exit security manager
org.assertj.swing.security.NoExitSecurityManagerInstaller.installNoExitSecurityManager().uninstall();

仍然有一个异常表明我无法避免:

Application tried to terminate current JVM with status 0 (org.assertj.swing.security.ExitException)

但是它不会导致测试失败并且可以忽略,并且我认为这是可以预期的,因为NoExitSecurityManagerInstaller被“启用”时应用程序退出了。

希望这会有所帮助!

答案 1 :(得分:0)

作为答案,我认为最好使用Bush脚本。我写了Bush脚本,该脚本从应用程序开始一个测试,然后逐行测试后关闭它。我认为在新的应用程序实例中运行测试用例并在测试后关闭应用程序是最简单的。

#!/bin/bash
echo "try to start test"    
java -cp /home/gui-application.jar 
app.gui.tests.runners.firsttestcase.RunFirstCase