@Before,@BeforeClass,@BeforeEach和@BeforeAll之間的區別

@Before的代碼在每次測試之前執行

@BeforeClass在整個測試方法執行之前運行一次

如果您的測試類有十個測試,則@Before代碼將執行十次,但是@BeforeClass將僅執行一次。

當多個測試需要共享相同的代碼時,可以使用@BeforeClass 建立數據庫連接屬于此類。

您可以將代碼從@BeforeClass移到@Before ,但是您的測試運行可能需要更長的時間。

注意,標記為@BeforeClass的代碼作為靜態初始化程序運行,因此它將在創建測試夾具的類實例之前運行。

JUnit 5中 ,標簽@BeforeEach@BeforeAll與JUnit 4中的@Before@BeforeClass等效。

它們的名稱更能說明它們的運行時間,可以解釋為:“在所有測試之前執行一次”和每次測試之前執行。?

Junit4和Junit5中每個注釋之間的區別:

+-------------------------------------------------------------------------------------------------------+
|                                       Feature                            |   Junit 4    |   Junit 5   |
|--------------------------------------------------------------------------+--------------+-------------|
| Execute before all test methods of the class are executed.               | @BeforeClass | @BeforeAll  |
| Used with static method.                                                 |              |             |
| For example, This method could contain some initialization code          |              |             |
|-------------------------------------------------------------------------------------------------------|
| Execute after all test methods in the current class.                     | @AfterClass  | @AfterAll   |
| Used with static method.                                                 |              |             |
| For example, This method could contain some cleanup code.                |              |             |
|-------------------------------------------------------------------------------------------------------|
| Execute before each test method.                                         | @Before      | @BeforeEach |
| Used with non-static method.                                             |              |             |
| For example, to reinitialize some class attributes used by the methods.  |              |             |
|-------------------------------------------------------------------------------------------------------|
| Execute after each test method.                                          | @After       | @AfterEach  |
| Used with non-static method.                                             |              |             |
| For example, to roll back database modifications.                        |              |             |
+-------------------------------------------------------------------------------------------------------+

?兩個版本中的大多數注釋都相同,但幾乎沒有區別

執行順序

?

@Before注釋函數將在具有@Test注釋的類中的每個測試函數之前執行

@BeforeClass注釋函數僅在類中的所有測試函數之前執行一次

@After注釋函數將在類中具有@Test批注的每個測試函數之后執行

@AfterClass注釋函數僅在該類中的所有測試函數之后執行一次

public class SampleClass {public String initializeData(){return "Initialize";}public String processDate(){return "Process";}}

測試

public class SampleTest {private SampleClass sampleClass;@BeforeClasspublic static void beforeClassFunction(){System.out.println("Before Class");}@Beforepublic void beforeFunction(){sampleClass=new SampleClass();System.out.println("Before Function");}@Afterpublic void afterFunction(){System.out.println("After Function");}@AfterClasspublic static void afterClassFunction(){System.out.println("After Class");}@Testpublic void initializeTest(){Assert.assertEquals("Initailization check", "Initialize", sampleClass.initializeData() );}@Testpublic void processTest(){Assert.assertEquals("Process check", "Process", sampleClass.processDate() );}}

輸出

Before Class
Before Function
After Function
Before Function
After Function
After Class

Junit 5中

@Before = @BeforeEach
@BeforeClass = @BeforeAll
@After = @AfterEach
@AfterClass = @AfterAll

?

import org.junit.Assert
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Testclass FeatureTest {companion object {private lateinit var heavyFeature: HeavyFeature@BeforeClass@JvmStaticfun beforeHeavy() {heavyFeature = HeavyFeature()}}private lateinit var feature: Feature@Beforefun before() {feature = Feature()}@Testfun testCool() {Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Testfun testWow() {Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}
}

如同

import org.junit.Assert
import org.junit.Testclass FeatureTest {companion object {private val heavyFeature = HeavyFeature()}private val feature = Feature()@Testfun testCool() {Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Testfun testWow() {Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284051.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記一次 .NET 某工控自動化控制系統 卡死分析

一:背景 1. 講故事前段時間遇到了好幾起關于窗體程序的 進程加載鎖 引發的 程序卡死 和 線程暴漲 問題,這種 dump 分析難度較大,主要涉及到 Windows操作系統 和 C 的基礎知識,所以有必要簡單整理和大家分享一下,上 win…

BZOJ4573:[ZJOI2016]大森林——題解

http://www.lydsy.com/JudgeOnline/problem.php?id4573 https://www.luogu.org/problemnew/show/P3348#sub http://uoj.ac/problem/195 https://loj.ac/problem/2092 小Y家里有一個大森林,里面有n棵樹,編號從1到n。一開始這些樹都只是樹苗,只…

Spring中神奇@aotuWrited

好久沒有寫博客了,放假就是充電學習的時候,的確一直是這樣做的。來給自己一點掌聲。我們還是進入今天的主題吧。 我們自己寫代碼一般會向下面這樣干啊,因為這樣簡單,其余交給spring去做吧。Spring會自動把生成的userService注入進…

40個常用的springBoot注解

一、Spring Web MVC注解 RequestMapping RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射。 Spring MVC和Spring WebFlux都通過RquestMappingHandlerMapping和RequestMappingHndlerAdapter兩個類來提供對RequestMapping注解的支持。 RequestMapping注解…

.NET MAUI 跨平臺應用開發 I|.NET MAUI 跨平臺基礎

編輯:Alan Wang排版:Rani Sun微軟 Reactor 為幫助廣開發者,技術愛好者,更好的學習 .NET Core, C#, Python,數據科學,機器學習,AI,區塊鏈, IoT 等技術,將每周三到周六&…

走出宣傳,國產VR手機盒子到底哪家強?

國產VR手機盒子作為入門機是一個不錯的選擇,不過你知道哪一款更適合你嗎? 從去年看虛擬現實還是一個遙不可及的夢,今年卻真正的火起來了。各大廠商紛紛推出自家的VR設備,宣傳活動如火如荼。愛嘗鮮的你是否按耐不住? 如果你覺得動…

Shell 學習筆記之運算符

基本運算符 算術運算符 val expr 2 2 需要注意的是 表達式和運算符之間需要有空格(比如2 2,不能是22)兩邊最外面的字符是,在esc鍵下面,不是引號哦乘號* 前面必須加上反斜杠 \ 才能實現乘法效果,比如 exp…

POJ 2353 DP

雙向DP記錄路徑。 // by SiriusRen #include <stack> #include <cstdio> #include <cstring> using namespace std; stack<int>s; int n,m,RECL,RECR,minn0x3fffffff,a[555][555],f[555][555],recl[555][555],recr[555][555]; int main(){memset(f,0x3…

【ArcGIS Pro微課1000例】0024:自定義坐標系統---以阿爾伯斯投影(Albers)為例

在實際工作中,經常需要進行矢量數據或柵格數據的投影轉換工作,但有時候ArcGIS中恰恰沒有我們需要的坐標系,此時,就需要我們自定義坐標系。本文以阿爾伯斯投影(Albers)為例,講解自定義投影的一般過程及注意事項。 文章目錄 一、自定義坐標系二、投影轉換一、自定義坐標系…

Linux 操作必備 150 個命令

linux 命令是對 Linux 系統進行管理的命令。對于 Linux 系統來說&#xff0c;無論是中央處理器、內存、磁盤驅動器、鍵盤、鼠標&#xff0c;還是用戶等都是文件&#xff0c; Linux 系統管理的命令是它正常運行的核心&#xff0c;與之前的 DOS 命令類似。 linux 命令在系統中有兩…

dotnet 6 為什么網絡請求不跟隨系統網絡代理變化而動態切換代理

本文記錄在 dotnet 6 的網絡和在 .NET Framework 的行為的變更。在 dotnet 6 下&#xff0c;默認的網絡請求在系統網絡代理變更的時候&#xff0c;是不會動態切換代理的。例如在應用運行進行網絡通訊之后&#xff0c;打開 Fiddler 抓包&#xff0c;此時將會發現 Fiddler 抓不到…

舊金山參議員提議發布“封殺令”,理由是馬路不為機器人所服務

說實話&#xff0c;這個理由有夠奇葩。 因為快遞無人機所受限制頗多&#xff0c;漸漸地&#xff0c;越來越多的快遞機器人被研制出來&#xff08;這里的“機器人”&#xff0c;包括無人車和及機器人&#xff09;&#xff0c;用于城市的快遞發送&#xff0c;比如國內的京東無人…

Socket編程:之雙機通信

服務端&#xff1a; 1 #include<sys/socket.h>2 #include<sys/types.h>3 #include<stdio.h>4 #include<unistd.h>5 #include<stdlib.h>6 #include<string.h>7 #include<netdb.h>8 #include<netinet/in.h>9 #include<arpa/i…

jquery中$each()

$.each()&#xff1a;可用于遍歷任何的集合(無論是數組或對象) $(selector).each()&#xff1a;專用于jquery對象的遍歷, 如果是數組,回調函數每次傳入數組的索引和對應的值(值亦可以通過this 關鍵字獲取,但javascript總會包裝this 值作為一個對象—盡管是一個字符串或是一個數…

【QGIS入門實戰精品教程】7.2:QGIS點狀數據符號化設置案例教程

點狀符號化的類型有:單一符號、分類、漸進、基于規則、點的位移、點聚類、熱圖。 相關閱讀: 【QGIS入門實戰精品教程】7.1:QGIS面狀數據符號化設置案例教程 文章目錄 一、單一符號二、分類三、漸進四、基于規則五、點的位移六、點聚類七、熱圖一、單一符號 跟面狀符號一樣,…

SpringCloud與Dubbo的比較

Dubbo 一、dubbo簡介 Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架&#xff0c;使得應用可通過高性能的RPC實現服務的輸出和輸入功能&#xff0c;可以和Spring框架無縫集成。 Dubbo是一款高性能、輕量級的開源Java RPC框架&#xff0c;它提供了三大核心能力&#xff…

VR 技術加上 8K 畫質! 2016 年里約奧運會亮點十足

據報道&#xff0c;2016 年里約奧運會將運用到 VR 技術。 最近&#xff0c;奧林匹克廣播服務公司&#xff08;OBS&#xff09;表示出對虛擬現實技術的興趣&#xff0c;其實用虛擬現實技術報道賽事已經不是什么新鮮的事了&#xff0c;之前 NBA 就這樣做過&#xff0c;但是將奧運…

POJ 1986 Distance Queries(LCA)

【題目鏈接】 http://poj.org/problem?id1986 【題目大意】 給出一棵樹&#xff0c;問任意兩點間距離。 【題解】 u,v之間距離為dis[u]dis[v]-2*dis[LCA(u,v)] 【代碼】 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; c…

WPF 實現柱形統計圖

WPF 實現柱形統計圖WPF 實現柱形統計圖作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;避免畫線發虛DrawingContext…

Win11卸載WSL,卸載Windows子系統

雖然 Linux 發行版可以通過 Microsoft Store 安裝&#xff0c;但不能通過 Microsoft Store 卸載。 可以通過下列命令卸載。 1、查看當前環境安裝的wsl wsl --list2、注銷&#xff08;卸載&#xff09;當前安裝的Linux的Windows子系統 wsl --unregister Ubuntu3、卸載成功&#…