【问题标题】:Run unit tests in IntelliJ IDEA from multiple modules together在 IntelliJ IDEA 中从多个模块一起运行单元测试
【发布时间】:2012-07-13 05:22:10
【问题描述】:

如何同时运行两个或多个 IDEA 模块的所有测试?

我正在使用许多模块,并且经常运行所有单元测试很重要,当我选择运行多个文件夹时,上下文菜单上不再有“运行”选项。

【问题讨论】:

    标签: testing intellij-idea


    【解决方案1】:

    最佳方式:(3年后修改)

    还有更好的方法来实现这一点。来自JetBrains JUnit Run Configuration docs

    1. 选择菜单“运行”→“编辑配置...”。单击左上角的绿色加号并选择 JUnit。

    2. 选择“测试种类”到“模式”,并输入您所看到的正则表达式:^(?!.*IT$).*$(它以插入符号^ 开头,以美元结尾$)。此正则表达式表示:所有未以 IT 名义完成的测试

      注意: 正则表达式将匹配限定的文件名,从而也很容易被模块/包排除。如果您的集成测试被分组在一个包com.me.integrationtests 中,则匹配此包中所有内容的正则表达式将是^(?!.*com\.me\.integrationtests.*).*$

    3. 选择“搜索测试”到“在整个项目中”。工作目录应设置为顶层模块工作目录(默认设置)。

    4. 为您的测试输入一个名称,例如“所有单元测试”。我也更喜欢标记“共享”选项,这样这个配置以后就不会消失了。单击应用并确定。

    您可以试验这个正则表达式以满足您的需要。

    原答案:

    这是可行的,虽然它不舒服。

    1. 选择第一个模块,右键单击test/java 目录并“运行所有测试”。它会创建测试配置。
    2. 选择“编辑配置”并在新创建的配置上选中“共享”,以便将其保存。
    3. 选择第二个模块“运行所有测试”,并在此配置上选中“共享”。
    4. 在“启动前”部分,单击“+”并选择“运行另一个配置”,然后选择第一个模块的配置。

    通过这种方式,您可以按顺序运行配置,并且每个配置都会获得一个新选项卡。不过,总比没有好。

    【讨论】:

    • 谢谢!到目前为止最干净的方式。想知道 3 年后是否有更好的方法来实现这一目标:)
    • 谢谢!您节省了我的时间,到目前为止,这仍然是我能找到的最聪明的方法,可以一次性解决多个覆盖报告生成和统一案例运行器问题。
    • 我刚刚用更好的解决方案编辑了我的分析器@CoderSpinoza
    • 更新后的版本不太好,如果您的测试用例在运行时使用模块特定的资源 - 我还是更喜欢原来的解决方案。
    • 如何让这个配置尊重我的 Gradle 依赖关系?现在,它因缺少 Guava 的课程而失败。运行单个模块的测试时,它工作正常。
    【解决方案2】:

    你必须创建一个“运行配置”:

    1. 转到顶部的下拉菜单,在“制作”按钮的右侧并点击它
    2. 选择“编辑配置”
    3. 现在单击“+”按钮添加新的运行配置并选择 JUnit
    4. 然后,在配置“运行配置”时,您会发现“测试种类”下拉菜单,选择“目录中的所有类”
    5. 选择您要用作根目录的目录,您可以选择项目的顶级目录或模块的任何目录。
    6. 选择从中获取类路径的 IntelliJ 模块(如果它有类路径,它可以是顶级项目)

    【讨论】:

    • 感谢您的提示,尽管它不能解决问题。完美的方法是选择几个目录,而不仅仅是一个。最终的解决方案是使用模式,但仍然可能只对包进行模式,而不是对目录...
    • 在“测试种类”中选择“全部在包中”,然后选择“在整个项目中”复选框。这将在所有模块中运行测试。
    • 我希望每个模块都以自己的模块目录作为工作目录运行 - 这似乎是不可能的,它似乎对整个事情使用单个模块目录。
    • @MartinOdhelius 这是迄今为止最干净的解决方案
    【解决方案3】:

    选择所有模块,右键单击它们并选择运行所有测试。这将创建一个名为 “Whole Project” 的配置,您可以随时再次运行该配置。

    我发现这比接受的答案更好,因为这会为每个模块单独运行单元测试。如果您的测试用例在其运行时使用特定于模块的资源,那么公认答案的最佳方法将不起作用。

    选择所有模块

    右键单击并选择运行所有测试

    获取新的运行配置

    【讨论】:

    • 第一步选择多个模块即可。
    • 在我看来,这应该是公认的答案。我唯一的保留是使用“最简单”这个词。不幸的是,使用 Intellij 运行配置并不容易。有很多方法可以通过配置完成简单的任务,如果有的话,通常只有一种。因此,您的任务通常是遍历所有不同的选项,以寻找可行的选项。一点都不容易。
    • 这会运行 all 项目(整个项目)中的测试,即使我选择了一小部分模块。这不是我想要的。在我的情况下,我想要运行测试的所有模块都共享一个通用包,因此我可以编辑生成的“整个项目”配置并添加包,该包过滤器仅针对模块子集运行测试。
    【解决方案4】:

    对我来说,这两种解决方案都不起作用或没有达到预期的效果。

    对我来说,我有 3 个模块。我的模块依赖项看起来像这样

    演示文稿 -> -> 数据

    我只是想一起执行所有测试。所以我想出了“跨模块依赖”的方法

    我的设置如下所示:

    【讨论】:

      【解决方案5】:

      这对我来说适用于具有多个模块的项目。

      创建一个新的 JUnit 运行/调试配置。 测试类型:“全包” 搜索测试:“整个项目”

      您还必须指定一个工作目录。

      【讨论】:

      • 我最终也是这样做的。
      【解决方案6】:

      另一个不太明显的情况是多个项目需要代码覆盖。天真的解决方案是选择多个项目并一次在其中运行所有单元测试。事实证明,如果类路径更改并且 IntelliJ 每个运行配置只有一个类路径条目,则单元测试可能会失败。在这种情况下,按顺序对项目运行单元测试实际上就足够了。这是因为在每次运行结束时 IntelliJ(2017.2.5 社区版)都会询问收集的覆盖率是否应该替换或应该添加到以前收集的覆盖率统计信息中。

      【讨论】:

        【解决方案7】:

        如果你使用 Gradle 并且有多个模块,你可以这样做:

        • 确保 IntelliJ 设置为使用 Gradle 运行测试 (Settings/Build, Execution, Deployment/Build Tools/Gradle -> Run tests using: Gradle)
        • 右键单击项目导航器中的模块并选择Run test in [module name]
        • 完成后,左键单击顶部工具栏中创建的配置并选择Edit Configurations...
        • 在运行字段中,只需在第一个模块之后添加更多模块,例如,如果您想在模块 foo、bar 和 baz 中运行测试::foo:test :bar:test :baz:test --tests *
        • 重命名配置,例如Test Foo + Bar + Baz

        现在您可以运行配置来执行您需要的测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-16
          • 2013-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 2017-05-11
          相关资源
          最近更新 更多