java - 如果 TestNG 不尝试运行 JUnit 测试,我的 Maven 项目如何同时运行 JUnit 和 TestNG?

标签 java maven junit testng maven-surefire-plugin

我有一个 Maven 项目,我需要在其中执行 JUnit 和 TestNG 测试。我的 pom.xml 已按如下方式设置 Maven Surefire 插件:

<!-- ... -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <configuration>
    <argLine>-Xmx1024m</argLine>
    <threadCount>1</threadCount>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-testng</artifactId>
      <version>2.19.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit47</artifactId>
      <version>2.19.1</version>
    </dependency>
  </dependencies>
</plugin>
<!-- ... -->

不幸的是,当我使用 Surefire 执行我的单元测试时,所有测试都正确执行,但 TestNG 似乎正在尝试第二次执行 JUnit 测试,并且日志中出现如下异常。

org.testng.TestNGException: 
Failure in JUnit mode for class com.hotwire.api.pricing.impl.PricingConfigIT: could not create/run JUnit test suite: 
Cannot find JUnit method class junit.framework.TestSuite$1.warning
at org.testng.junit.JUnitTestRunner.runFailed(JUnitTestRunner.java:239)
at org.testng.junit.JUnitTestRunner.start(JUnitTestRunner.java:232)
at org.testng.junit.JUnitTestRunner.run(JUnitTestRunner.java:213)
at org.testng.TestRunner$1.run(TestRunner.java:672)
at org.testng.TestRunner.runWorkers(TestRunner.java:1003)
at org.testng.TestRunner.privateRunJUnit(TestRunner.java:703)
at org.testng.TestRunner.run(TestRunner.java:610)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1170)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1095)
at org.testng.TestNG.run(TestNG.java:1007)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:132)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeMulti(TestNGDirectoryTestSuite.java:198)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:94)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:147)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)

如何防止此异常污染我的日志?

最佳答案

我想我会分享我的答案,因为我花了一点时间才弄明白,而且我的特定问题与遇到此特定堆栈跟踪的其他人的问题有些不同。

解决方案是在pom.xml 文件中的Surefire 配置中添加以下XML 元素。

<configuration>
  <!-- pre-existing config -->
  <properties>
    <property>
      <name>junit</name>
      <value>false</value>
    </property>
  </properties>
</configuration>

这在 Surefire documentation on running JUnit and TestNG tests together 中有进一步的记录。 .

关于java - 如果 TestNG 不尝试运行 JUnit 测试,我的 Maven 项目如何同时运行 JUnit 和 TestNG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013776/

相关文章:

java - 复杂的 Mongo DB 查询 - 子文档

java - 我们可以改进这段代码吗?

java - 使用 Maven,子模块如何继承父模块的存储库?

java - 在 Eclipse 中发布应用程序时替换属性文件的内容

jpa - 无法通过 Junit 初始化 Netbeans 中的 EntityManager

unit-testing - 测试套件设置方法是对每个测试执行一次,还是只对所有测试执行一次?

java - 使用 artifactory/maven 的配置和属性文件的最佳实践

java - HashSets 中的 contains-Method 如何工作?

java - 使用自定义提供程序的 Spring Boot 安全性

java - 想要使用 TestNg 包运行 Maven 项目,但在执行项目时出现错误