当前位置: 首页 > 知识库问答 >
问题:

Surefire因检查系统是否正常而失败。在一个junit测试中调用了exit()

柯子琪
2023-03-14

为了描述我遇到的问题,让我们假设有一个虚拟类:

import static java.lang.System.exit
class Example {

  void methodGeneratingSystemExit1() {
  exit 1
  }

  void methodGeneratingSystemExit2() {
  exit 2
  }
}

和对它的测试:

import org.junit.Test
import org.junit.Rule
import org.junit.contrib.java.lang.system.ExpectedSystemExit
class ExampleTest {
@Rule
 public final ExpectedSystemExit expectedSystemExit = ExpectedSystemExit.none()

@Test
void "System exits with code 1 when method1 is generated"() {
expectedSystemExit.expectSystemExitWithStatus(1)
methodGeneratingSystemExit1()
}
@Test
void "System exits with code 1 when method1 is generated"() {
expectedSystemExit.expectSystemExitWithStatus(2)
methodGeneratingSystemExit2()
}


}

正如我所说的,这只是一个虚拟示例,但测试仍然执行系统应该执行的操作。调用exit(),测试会注意到,并且全部为绿色。问题是,我有一个surefire插件,它会给我一个消息,比如:

错误]无法执行目标org.apache.maven.plugins: maven-surefire-plugin: 2.17:在项目xtrakter上测试(默认测试):目标org.apache.maven.plugins的执行默认测试: maven-surefire-plugin: 2.17:测试失败:分叉VM在没有正确道别的情况下终止。虚拟机崩溃或调用System.exit?

如何在surefire中抑制该错误?或该问题的任何其他解决方法/解决方案?

共有2个答案

冯卜鹰
2023-03-14

Surefire不支持调用系统的测试或任何引用库。随时退出()。

来源:http://maven.apache.org/surefire/maven-surefire-plugin/faq.html#vm-termination

我认为解决这个问题是不可能的,这肯定是核心行为。

子车飞文
2023-03-14

您可以对系统进行测试。通过安装您自己的SecurityManager退出,在测试期间实现checkExit方法。参见Java:如何测试调用系统的方法。退出()?更多细节。

 类似资料:
  • 我试图对我的骆驼路由进行单元测试,在成功调用路由后,我从测试代码中获得了404,这意味着我无法从测试中读取响应,总是抛出没有找到404 这是我的测试代码 我的路线定义如下 所以我的路由被调用,日志输入器记录了有效负载的200成功,但是当生产者模板返回时,它有404异常。 知道我做错了什么吗?

  • 问题内容: 我已经使用JUnit 4和spring-test库编写了一些JUnit测试。当我在Eclipse中运行测试时,可以正常运行并通过。但是,当我使用Maven运行它们(在构建过程中)时,它们无法给出与Spring相关的错误。我不确定是什么引起了问题,JUnit,Surefire或Spring。这是我的测试代码,spring配置以及从Maven获得的异常: PersonServiceTest

  • 我面临着另一个问题。我的项目中有5个测试类(junit),它们都能够进行参数化测试。我可以用eclipse单独测试这些类,那时它工作得很好。当我通过maven(sure fire)运行它们时,它们失败了。错误消息看起来像org。朱尼特。跑步者。参数化。ParametersMethodReturnedErrorType(参数化。java:340)。请帮忙。 代码片段: 堆栈跟踪:

  • 问题内容: 在Go语言中,您可以通过添加ZONEINFO环境变量来指定要使用的特定zoneinfo.zip文件,该变量指向要用于时区信息的特定文件。这很棒,因为它使我可以确保前端和后端使用的IANA时区数据库的版本相同。 但是,似乎没有任何方法可以检测对指定区域信息文件的使用是否失败。查看源代码(https://golang.org/src/time/zoneinfo.go),看来使用指定文件的任

  • 我有一个简单的测试用例: FileManager中的函数删除 /myDir下的所有文件,然后再次保留文件。 如上所述,我有一个。运行时,我可以按以下顺序查看所有打印: 但是,测试在失败。有两件事我不明白: > 我不明白,它在中失败了,为什么我仍然可以看到打印的,听起来就像是失败了,它没有停止运行,而是继续运行下一个测试?JUnit测试用例中的场景背后发生了什么?? 我不明白的另一件事是为什么tes

  • 当我进行JUnit测试时,我希望调试器在测试代码中引发任何异常导致测试失败时立即停止,以便检查出了什么问题。有没有可能配置IntelliJ的调试器来实现这一点,而不中断其他异常? 如果我在任何未捕获的异常上设置一个异常断点,这将不起作用,因为异常是由JUnit捕获的。如果我试图用catch类org在捕获的异常上也中断断点。朱尼特。,这也行不通,因为异常在到达JUnit之前就被Javas反射机制捕获