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

如何让JUnit测试知道它们当前是否在套件中运行

越文康
2023-03-14

我希望测试类知道它们当前是否在套件中执行。我有一个测试套件,它使用外部资源(ExternalResource)在所有测试之前启动服务器,在所有测试之后关闭服务器。效果完美。在编写新测试时,我希望运行一个测试(或全部来自同一个测试类)来启动和停止服务器。所以我想让这些类知道它们当前是否在套件中执行,并相应地启动服务器。这似乎是不可能的。套件描述似乎永远不会传递给规则或类规则。我也无法获得运行当前测试的当前运行程序的引用。

有没有办法做到这一点?

由于第一个建议答案而更新:

请注意,在测试套件之前和之后可能会运行许多其他测试。因此,我不能依赖JVM关闭。我的主要需求是,我希望在编写测试后立即从IDE(eclipse)中运行一个测试,并且仍然可以启动和关闭服务器。但这不应该发生在套件中的每个测试中。

共有2个答案

胡野
2023-03-14

我可以简单地建议使用端口探测并检查端口是否已绑定在JUnit测试规则(或在类之前的带注释方法)内,并且仅在端口仍然可用时初始化服务。通过这种方式,您可以在外部或套件内启动服务,并在测试中重用它,或者在测试之前初始化它(如果端口仍然可用)。当然,这需要固定端口分配,该分配仅用于测试时所需的特定服务。

由于您显然正在执行联调,您可能还对如何设置Maven或Gradle以在测试集成阶段自动执行测试感兴趣。

顾嘉纳
2023-03-14
  • 让所有测试类扩展一些AbstractServerTest
  • 在其中添加BeforeClass方法来检查服务器是否已经运行,如果没有,则启动它。
    • 请记住,将为每个子类调用BeforeClass,因此if语句是必要的
    • 如果您的服务器作为一个单独的进程运行,那么在您的BeforeClass方法中,您可以添加一个shutdownHook,它将在JVM关闭时执行一些命令来停止服务器

 类似资料:
  • 问题内容: 在我的代码中,仅当它在JUnit测试中运行时,才需要进行某些修复。如何确定代码是否在JUnit测试中运行?是否有类似JUnit.isRunning()== true的东西? 问题答案: 如果您要以编程方式确定要运行哪个“配置文件”,则可能是一个好主意。考虑使用Spring Profiles进行配置。在集成测试中,您可能需要针对其他数据库进行测试。 这是经过测试的有效代码

  • 每当我使用Eclipse对代码运行JUnit测试时,它似乎只运行非@Nested的测试,我不知道为什么。 有人知道为什么会这样吗?

  • 问题内容: 我的流程中有一个方法,仅当该流程不在后台时才应运行。如何动态测试当前进程是否在后台?谢谢 问题答案: 查看Unix FAQ:进程如何检测它是否在后台运行? 普遍的答案是:您无法确定您是否在后台运行。 但是您可以检查stdin是否为终端:

  • 问题内容: 在eclipse中,使用JUnit 4,您可以右键单击项目或包,然后单击“以JUnit Test身份运行”,它将运行该组中的所有JUnit测试。有没有办法在代码中执行相同的操作? 问题答案: 您可以在junit中使用诸如JUnitCore之类的软件包,如下所示:

  • 我正在尝试使用Zerocode使用Junit(4)运行负载测试。通过遵循这些教程,我能够运行现有的Junit测试类 使用零代码框架使用JUnit进行负载测试 我有一个Junit测试套件可以正常工作,我想知道如何使用zerocode来启动这个测试套件,以便它可以运行负载测试所有测试类中的所有测试。上面的例子描述了如何运行选定的测试方法,或者只运行少数测试方法。

  • 我已经编写了一个JUnit测试套件,用于运行多个测试用例。 现在我想一次运行我的测试套件类(AllTest.java),以便所有测试都由一个类触发、执行和管理。我知道maven故障保护插件是可用的,但是有没有其他更简单的方法从maven调用JUnit测试套件呢? 我不想使用另一个插件。 这是我当前的maven-故障安全-插件配置: