【问题标题】:Spring Boot Cucumber test is exiting due to System.exit由于 System.exit,Spring Boot Cucumber 测试正在退出
【发布时间】:2021-10-02 10:53:14
【问题描述】:

我使用 Spring Boot 编写了一个 Cucumber 测试来测试另一个 maven 模块项目 XX 功能。 Project XX 有许多微主要功能,它们作为 jar 运行并被不同的团队使用。测试用例运行良好,但项目是每个微功能在成功执行结束时都使用System.exit(statusCode),这显然停止了我的测试用例

想知道是否有任何方法可以防止我的弹簧靴从System.exit(statusCode) 退出。我正在使用 Spring Boot 2.5.4

有人可以帮我解决这个问题吗?

更新 1

根据 Gaël J 的建议,我使用了System Rules,并在我的黄瓜步骤定义中尝试如下所示,但它仍然不起作用

import org.junit.Rule;
import org.junit.contrib.java.lang.system.Assertion;
import org.junit.contrib.java.lang.system.ExpectedSystemExit;

public class StepDefs{

    @Rule
    public final ExpectedSystemExit exit = ExpectedSystemExit.none();
    :
    :
    :
    @When("^the function is executed$")
    public void functtionIsExecuted() {

    exit.expectSystemExitWithStatus(0);
        exit.checkAssertionAfterwards(new Assertion() {
            @Override
            public void checkAssertion() throws Exception {
                System.out.println("This is executed AFTER System.exit() method!");
            }
        });
        System.out.println("This is executed right before System.exit().");
        String args = {"some args"}
        new MailExecutor().main(args);
    }
} 

【问题讨论】:

  • 如果你完全使用 JUnit,你可以使用 JUnit 退出断言规则(有一个库提供)。
  • @GaëlJ 我试过了还是不行,你能检查我的更新 1

标签: java spring spring-boot cucumber


【解决方案1】:

不要过多地依赖库通常是明智的。在这种情况下,您可以在 MailExecutor 类上编写扩展,并使用不调用它的实现覆盖调用 System.exit() 的函数。然后,您可以通过扩展类测试 MailExecutor 类。 Michael Feathers 在“有效地使用遗留代码”中描述了这种技术。

【讨论】:

  • 我明白......当我检查代码时,它更加复杂......这是他们在一个函数中编写所有内容的遗留问题,我无法为此创建包装器
【解决方案2】:

这更像是一个软件工程问题。所以解决方案真的取决于。

首先,我会尝试更改并发布原始代码。如果它不再存在或所有者不合作,这可能不可行。

我会考虑分叉代码并制作自己的版本。如果它不再存在或您无法承担维护负担,这可能不可行。

如果失败,我会考虑在进程外测试应用程序。而是使用单元测试,在新进程中启动应用程序并观察输入/输出。有一些工具可以测试 CLI 应用程序。

然后我会考虑对这些应用程序的需求,以及团队与其他一切之间这种关系的确切设置。问题不在于这些工具调用System.exit。是它周围的一切导致他们这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多