【问题标题】:Adjust assertions for maven tests调整 Maven 测试的断言
【发布时间】:2015-06-23 09:51:39
【问题描述】:

我从事 Java/Maven 项目。我使用mvn test 来运行我的测试套件。但是,在这种情况下,所有断言都已启用。不幸的是,这将一些操作的时间从log(n) 增加到n^2,这是相当不方便的。更重要的是,该操作是在依赖项packageA 中定义的,而我在packageB 上工作。使用纯 Java,我可以添加 -ea:packageB... 以仅启用我实际需要的断言。是否可以使用pom.xml 的内容或mvn 的命令行参数来实现此行为?我知道我可以禁用 all 断言,但我宁愿将断言保留在我实际正在处理的包中......

【问题讨论】:

  • 如果重构你的代码是可能的,你可以尝试使用similar as explained here,你的基本断言在基类中,并且所有断言在某些情况下在调度对象中省略。通过 maven 配置文件,您可以决定是想要所有断言还是只想要基本断言。一般来说,你应该把你的单元测试分成categories虽然

标签: java maven junit


【解决方案1】:

您可以使用surefire-plugin 来实现。但首先您需要为不同的包指定配置文件。

使用 surefire-plugin,您可以使用通配符或正则表达式排除或包含包。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
      <includes>
        <include>%regex[.*[Cat|Dog].*Test.*]</include>
      </includes>
    </configuration>
  </plugin>

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
      <excludes>
        <exclude>**/TestCircle.java</exclude>
        <exclude>**/TestSquare.java</exclude>
      </excludes>
    </configuration>
  </plugin>

您可以找到更多详细信息on this site

【讨论】:

  • 好吧,我不想包含/排除测试用例,我想启用/禁用assert 语句...
  • @hfhc2 有什么区别?为什么你仍然想执行测试但没有断言?你期望从中获得什么?相反,只需排除您不想运行的包。
  • 好吧,我还是要测试 assertTrue / assertEquals... 语句...
【解决方案2】:

我使用这些属性:

<maven.test.skip>false</maven.test.skip>
<maven.test.failure.ignore>false</maven.test.failure.ignore>

然后您可以保持 Asserts 不变,但将这些属性更改为在 Assert.fail() 上失败,或者根本不进行测试。

或者类似地使用 CMD 的额外参数,比如添加:

-Dmaven.test.skip=true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2013-06-25
    • 1970-01-01
    • 2020-02-11
    • 2020-05-29
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多