junit数据驱动测试
重要要点
|
在JUnit 5的第1部分中 ,我们了解了如何设置JUnit并开始编写测试,并且看到了表面上发生了什么变化。 我们还讨论了重写的需求以及新体系结构如何将JUnit Platform与JUnit Jupiter分开。
在第二部分中,我们将仔细研究如何运行测试以及JUnit 5为我们的开发人员带来的一些非常酷的新功能。
运行测试
JUnit Jupiter测试可以作为JUnit 4运行的一部分运行,也可以与新的JUnit 5基础架构一起运行。
JUnit 4的一部分
还记得五秒钟的设置吗? 它使用了以下工件:
org.junit.jupiter:junit-jupiter-api
org.junit.jupiter:junit-jupiter-engine
org.junit.platform:junit-platform-runner
正如我们在第一部分中讨论的那样,我们需要使用junit-jupiter-api来编写测试,并需要junit-jupiter-engine来发现并运行它们。 最后一块junit-platform-runner包含类JUnitPlatform ,它是JUnit 4接口Runner的实现 ,它基本上只是告诉引擎运行测试。 用作@RunWith(JUnitPlatform.class)时,它将作为JUnit 4运行的一部分执行我们的新测试。 请注意,要使此方法起作用,该类必须是常规的JUnit 4测试类,即,它必须遵守所选工具所要求的约定(例如Maven的命名约定 ),并且必须是公共的。 使用这种方法,我们的JUnit Jupiter测试将在具有JUnit 4集成的任何工具下运行。
但是,我们可以做一点改进。 运行器评估@SelectPackages批注,因此可以用于运行包中的所有测试:
package com.infoq.junit5;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.runner.SelectPackages;
import org.junit.runner.RunWith;
@RunWith(JUnitPlatform.class)
@SelectPackages({ "com.infoq.junit5" })
public class TestWithJUnit5 { }
在这里,包被解释为层次结构,因此将执行以com.infoq.junit5开头的所有包中的所有测试。 由于这些测试是由JUnit Platform运行程序发现的(而不是工具的JUnit 4集成),因此不再需要将它们公开。
一个警告:如果我们使用一种利用新架构的机制(我们将在第二秒讨论),并且该机制包含一个JUnit 4引擎,则这些测试将执行两次:在JUnit 4运行期间(由于运行器,我们进行了一次测试)使用@RunWith ),并在JUnit 5运行期间再次应用。
使用JUnit 5
现在让我们看一下如何使完整的JUnit 5机制运行。 它将使用junit-platform-launcher提供的API ,并捆绑许多引擎来发现和运行测试。 目前,唯一相关的引擎是Jupiter(在junit-jupiter-engine中 )和JUnit 4(在junit-vintage-engine中 )。
集成开发环境
以来 2016.2 IntelliJ IDEA具有基本 JUnit 5支持 。 追赶一个移动的目标还不是很完美,但是它可以正常工作并使新的JUnit玩起来更加容易。
Eclipse团队是