概述

在本简短教程中,我们分别对 @Before@BeforeClass、 @BeforeEach 和 @BeforeAll 注解来进行一些简短的说明和实践。

需要注意的是,针对 Junit 版本的不:

  • JUnit 4 对应使用的是: @Before 和 @BeforeClass
  • JUnit 5 对应使用的是: @BeforeEach 和 *@BeforeAll

虽然名字有所改变,但是目的是相同的,并且功能都是向对应的。

另外,与其完全相对的还有一个就是 @After 的注解。

让我们从 JUnit 4 开始

@Before

这个注解是在 JUnit 4 中使用的。

使用这个注解的意思就是在测试类中,每一个测试开始执行之前都需要执行这个注解标记的方法。

通常用在我们希望对所有测试在执行之前都需要执行的方法。

让我们先对一些值进行初始化:

@RunWith(JUnit4.class)
public class BeforeAndAfterAnnotationsUnitTest {// ...private List<String> list;@Beforepublic void init() {LOG.info("startup");list = new ArrayList<>(Arrays.asList("test1", "test2"));}@Afterpublic void teardown() {LOG.info("teardown");list.clear();}
}

请注意,在这里我们还在后面添加了一个 @After 注解,这个注解的意思是在每一个测试执行后都会对列表进行清理。

现在,我们添加一些测试来检查我们 List 了列表的大小:

@Test
public void whenCheckingListSize_thenSizeEqualsToInit() {LOG.info("executing test");assertEquals(2, list.size());list.add("another test");
}@Test
public void whenCheckingListSizeAgain_thenSizeEqualsToInit() {LOG.info("executing another test");assertEquals(2, list.size());list.add("yet another test");
}

在本测试用例中:**针对每一个测试方法,确保所有的测试环境是相同的对每一个测试都非常重要。**在本用例中,我们主要需要确保变量的初始化是完全相同的,这是因为每一个测试方法在执行的时候都会对初始化后的变量进行修改。

随后,我们对输出的数据进行查看的时候,我们会发现针对每一个测试方法在执行的时候 init 和 teardown 方法都会在测试执行之前执行一次。

... startup
... executing another test
... teardown
... startup
... executing test
... teardown

@BeforeClass

针对每次测试执行的之前都要执行的方法相比,我们希望使用 @BeforeClass 这个注解。

这个注解的意思是针对测试类中的所有测试方法,只执行一次。

针对一些开销比较大的方法,你可能希望在所有方法执行之前只执行一次,比如说数据库连接和启动某个系统,这个时候你就可以使用 @BeforeClass 这个注解来执行标记的方法了。

让我们来创建一个与上面相同的测试类,不同的是我们使用了不同的注解。

@RunWith(JUnit4.class)
public class BeforeClassAndAfterClassAnnotationsUnitTest {// ...@BeforeClasspublic static void setup() {LOG.info("startup - creating DB connection");}@AfterClasspublic static void tearDown() {LOG.info("closing DB connection");}
}

需要注意的是,**上面的这些方法必须是静态方法(static)**因为这些方法将会在 test 测试之前先行执行。

随后,让我们添加一些简单的测试:

@Test
public void simpleTest() {LOG.info("simple test");
}@Test
public void anotherSimpleTest() {LOG.info("another simple test");
}

这次,如果你查看测试方法的输出后,你会看到我们标记的方法只在所有测试开始执行之前执行了一次。

控制台的输出如下:

... startup - creating DB connection
... simple test
... another simple test
... closing DB connection

@BeforeEach 和 @BeforeAll

@BeforeEac 和 @BeforeAll 是 JUnit 5 中的注解,这个注解与 JUnit 4 中的 @Before 和 @BeforeClass 是完全对应的。

这 2 个注解在 JUnit 5 中被重命名的原因主要是为了避免冲突。

你可以拷贝上面的方法,然后使用 JUnit 5 的注解来重新注解:
@BeforeEach 和 @AfterEach

@RunWith(JUnitPlatform.class)
class BeforeEachAndAfterEachAnnotationsUnitTest {// ...private List<String> list;@BeforeEach void init() {LOG.info("startup");list = new ArrayList<>(Arrays.asList("test1", "test2"));}@AfterEachvoid teardown() {LOG.info("teardown");list.clear();}// ...
}

然后你可以对程序的输出日志进行查看,你会看到与 @Before 和 @After 注解是完全对应的:

... startup
... executing another test
... teardown
... startup
... executing test
... teardown

最后,你可以重新注解下 @BeforeAll 和 @AfterAll 再进行测试:

@RunWith(JUnitPlatform.class)
public class BeforeAllAndAfterAllAnnotationsUnitTest {// ...@BeforeAllpublic static void setup() {LOG.info("startup - creating DB connection");}@AfterAllpublic static void tearDown() {LOG.info("closing DB connection");}// ...
}

随后通过测试来查看测试结果的输出:

... startup - creating DB connection
... simple test
... another simple test
... closing DB connection

结论

在本篇文章中,我们主要针对 @Before、 @BeforeClass、 @BeforeEach 和 @BeforeAll 这几个注解进行了说明。

同时也针对这几个注解适用的 JUnit 版本进行了解释。

如果你使用 IDE 的话,在输入 Before 这个注解的时候,你会直观的发现这个几个注解分别是属于 JUnit 4 还是 5。

因为我们知道在 JUnit 5 的时候,JUnit 开始使用的包的名字为: org.junit.jupiter.api

上面的图,比较直观的反映了上面的情况。

Junit 4 的 @Before 和 @BeforeClass 对比 Junit 5 @BeforeEach 和 @BeforeAll - 测试发布 - OSSEZ

Junit 4 的 @Before 和 @BeforeClass 对比 Junit 5 @BeforeEach 和 @BeforeAll相关推荐

  1. junit测试起名字规则_如何在JUnit 5中替换规则

    junit测试起名字规则 最近发布的JUnit 5(又名JUnit Lambda) alpha发行版引起了我的兴趣,在浏览文档时,我注意到规则以及运行程序和类规则都消失了. 根据文档,这些部分竞争的概 ...

  2. @ Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别

    本文翻译自:Difference between @Before, @BeforeClass, @BeforeEach and @BeforeAll What is the main differen ...

  3. @Before,@BeforeClass,@BeforeEach和@BeforeAll之间的区别

    @Before的代码在每次测试之前执行 @BeforeClass在整个测试方法执行之前运行一次 如果您的测试类有十个测试,则@Before代码将执行十次,但是@BeforeClass将仅执行一次. 当 ...

  4. 【单元测试】Junit 4(二)--eclipse配置Junit+Junit基础注解

    1.0 前言 ​ 前面我们介绍了白盒测试方法,后面我们来介绍一下Junit 4,使用的是eclipse(用IDEA的小伙伴可以撤了) 1.1 配置Junit 4 1.1.1 安装包 我们需要三个jar ...

  5. junit 测试似有方法_Spring整合Junit的使用

    今天来讲讲Spring整合junit的使用 我们在编写完Spring的代码后,往往需要测试代码的正确性,这个时候就需要用到单元测试了.我们这里使用的版本是junit4. 一个程序的入口是main方法, ...

  6. maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开

    maven junit测试 为什么单元测试应与集成测试分开运行 单元测试级别的TDD相当简单,因为单元测试中的类要么没有复杂的依赖关系,要么使用模拟框架(例如Mockito)来模拟依赖关系. 但是,当 ...

  7. JUnit 5和Selenium –使用Gradle,JUnit 5和Jupiter Selenium设置项目

    Selenium是一组支持浏览器自动化的工具和库,主要用于Web应用程序测试. Selenium的组件之一是Selenium WebDriver,它提供客户端库,JSON有线协议(与浏览器驱动程序进行 ...

  8. Junit 的 @RunWith():Runner,即Junit的运行器

    什么是Runner,@RunWith()到底有什么用? Runner是Junit的运行器,即运行测试用例的工具. 我们可以在测试类之上,使用@RunWith()注解为这个类指定一个特定的Runner. ...

  9. @Before, @BeforeClass, @BeforeEach 和 @BeforeAll之间的不同

    1. 不同注解的区别如下: 特性 Junit 4 Junit 5 在当前类的所有测试方法之前执行. 注解在静态方法上. 此方法可以包含一些初始化代码. @BeforeClass @BeforeAll ...

  10. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具 单元 ...

最新文章

  1. LeetCode简单题之K 进制表示下的各位数字总和
  2. 2018目标检测最新算法+经典目标检测算法
  3. 重磅!亚马逊将在2019年全面弃用Oracle数据库
  4. Servlet异常处理
  5. 烽火2640路由器命令行手册-12-IBM网络配置命令
  6. java ee jsp_EE JSP:Servlet的反向外套
  7. 「技术人生」专题第1篇:什么是技术一号位?
  8. linux ps axo,Linux shell-场景篇
  9. 多线程、多平台环境中的跟踪 - 使用 log4j 和 UNIX 命令来挖掘跟踪数据
  10. 学以致用深入浅出数字信号处理 pdf_数字阵列雷达--相控阵专题讲座之三
  11. 出现错误“0x7c938fea指令引用的0x00000010内存。该内存不能为written。”的另一种可能性
  12. 省赛题目(4月23日)の答案
  13. 记录一次油猴脚本开发的Demo(入门级)、开发过程
  14. 西门子S7协议底层原理分析
  15. itil 容量管理流程_(ITIL体系管理)可用性管理流程V1.1.doc
  16. 将写好的java代码打包成jar包并且运行
  17. 保研夏令营、考研复试院校信息汇总表的模板与制作注意事项
  18. python srt字幕与视频合并
  19. 逻辑卷、物理卷、卷组 的关系
  20. Creo另存装配体子零件和图纸同样另存

热门文章

  1. CDH-CM资源下载!!免费!!!
  2. 怎么下载卫星地图导出为离线包
  3. 惠普T5325 惠普T5565 惠普T5400 瘦客机评测
  4. 漏洞扫描器简单教程(天镜、Nessus、Appscan、Awvs)
  5. 控制 计算机某个程序自动开关,电脑自动开关机软件(示例代码)
  6. Threejs实现天空盒,全景场景,地面草地
  7. 解决Win10无法安装运行SqlServer 2000
  8. NAND flash和NOR flash的区别详解
  9. Alexa工具条正确安装方法 Alexa工具条正确使用方法 Alexa工具条正确应用
  10. 现代数字图像处理---lena图像处理