如何使用 maven-surefire-plugin 在同一项目中执行 JUnit 和 TestNG 测试?
现在我有两种类型的测试,但是当我说“mvn test”时,它只执行 TestNG 测试而不执行 Junit。 我想一个接一个地执行这两个操作。 任何想法 ?
Right now I have both type of tests but when I say "mvn test" it only executes TestNG tests and not Junit. I want to execute both one after another. Any Idea ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
选择提供商的官方方式。
有关此的更多信息: 在一个 Maven 模块中混合 TestNG 和 JUnit 测试 - 2013 版
当前链接位于 maven-surefire-plugin 示例。
搜索“运行 TestNG 和 JUnit 测试”。
您将需要配置 testng 提供程序以忽略 junit 测试,如下所示:
Official way with selecting providers.
More info about this: Mixing TestNG and JUnit tests in one Maven module – 2013 edition
Current Link for this in the maven-surefire-plugin examples.
Search for "Running TestNG and JUnit Tests".
You will want to configure the testng provider to ignore the junit tests like so:
我有一个 更好的解决方案。
这个想法是创建 maven-surefire-plugin 的两个执行,一个用于 JUnit,一个用于 TestNG。 您可以通过指定不存在的
junitArtifactName
或testNGArtifactName
来在每次执行时禁用 TestNG 或 JUnit 之一:I have a better solution.
The idea is to create two executions of the
maven-surefire-plugin
, one for JUnit, one for TestNG. You can disable one of TestNG or JUnit per execution by specifying nonexistingjunitArtifactName
ortestNGArtifactName
:有一个此问题尚未解决,因此没有优雅的方法可以做到这一点。
对你来说,选择一个框架并坚持使用会简单得多。
编辑:我之前的答案不起作用,因为您无法在执行中指定依赖项。
我尝试了几种方法,但我能管理的最好方法是为 TestNG 依赖项创建一个配置文件,以便您可以在 TestNG 和 JUnit 测试之间切换,似乎没有办法同时运行 TestNG 和 Junit 4 测试。
另一点需要注意:您可以从 TestNG 启动 JUnit 测试,但是我认为这只适用于 JUnit 3 测试。
There is an open issue for this, so there's no elegant way to do this.
It would be far simpler for you to pick a framework and stick with it.
Edit: My previous answer doesn't work because you can't specify dependencies in the execution.
I've tried a few approaches, but the best I can manage is to create a profile for the TestNG dependency so you can toggle between TestNG and JUnit testing, there doesn't seem to be a means to run both TestNG and Junit 4 tests.
One other point to note: You can launch your JUnit tests from TestNG, but I think this only works for JUnit 3 tests.
为此还有另一个出路。 您也可以要求 TestNG 运行 Junit 测试用例。
下面是运行所有测试用例的示例 testng.xml
There is another wayout for this. You could ask TestNG to run Junit test cases as well.
Below is the sample testng.xml to run all test cases
感谢此链接(http://jira.codehaus.org/browse/SUREFIRE-377),这里是我之前问题的解决方案(执行 3 次而不是 2 次)
Thanks to this link (http://jira.codehaus.org/browse/SUREFIRE-377), here is a solution to my previous problem (having 3 executions instead of 2)
我找到了一个解决方案,可以使用 TestNG 运行两种测试类型,而无需更改构建工具配置。
我使用 Gradle 进行了测试,但也应该使用 Maven。
请注意,这将在 TestNG 内运行 JUnit 测试,但反之则不然。
诀窍是在测试类中使用两个框架的注释并使用 TestNG 断言来实现 JUnit 兼容性。
使用此技巧,您可以使用 TestNG 轻松运行现有的 JUnit 测试,帮助您在时间允许时迁移它们。
希望能帮助到你!
I found out a solution to run both test types with TestNG without changing your build tool configuration.
I tested with Gradle but should work with Maven too.
Note that this will run JUnit tests inside TestNG, but not the other way back.
The trick is to use both frameworks' annotations in the test classes and use TestNG asserts for JUnit compatibility.
Using this hack, you can easily run existing JUnit tests with TestNG, helping you migrate them when time allows.
Hope it helps!
对于 JUnit ---
需要时类似地使用 TestNG 的依赖项
For JUnit ---
Similarly use the dependency for TestNG when required
我发现解决方案是强制 Surefire 插件使用 JUnit。 我通过覆盖特定项目中的 Surefire 插件来做到这一点,如下所示。 该依赖关系强制一定要使用 JUnit。
I found that the solution was to force the sure-fire plugin to use JUnit. I did this by overriding surefire plugin in the specific project as follows. The dependency forces surefire to use JUnit.
基于之前的解决方案。 我发现这对我们最有效。 我们面临的另一个问题是 TestNG 尝试运行旧的 JUnit 测试。 我们通过以不同的方式命名所有 TestNG 测试(例如 *TestNG.java)来避免这种情况。 下面是两次执行surefire-plugin 的配置。
Based on previous solutions. I found this worked best for us. One more issue we were facing was TestNG trying to run old JUnit tests. We avoided this by naming all TestNG tests differently (e.g. *TestNG.java). Below is the configuration with two executions of surefire-plugin.
如果您只指定 testng 提供程序,它将同时运行 junit 测试和 testng 测试一次。
所以对测试的命名没有限制。
插件版本:
Surefire-plugin 2.16(junit47 和 testng 提供商的版本均设置为 2.16)
testng 依赖项 6.8.7
junit依赖4.7
if you just specify testng provider, it will run both junit tests and testng tests all just once.
so there is no restriction on naming the tests.
plugin versions:
surefire-plugin 2.16 (junit47 and testng providers both version set to 2.16)
testng dependency 6.8.7
junit dependency 4.7
对于 Junit 这解决了我的问题
for Junit this solved my problem