日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扩展 junit 框架_JUnit 5扩展模型的生命周期

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扩展 junit 框架_JUnit 5扩展模型的生命周期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擴展 junit 框架

JUnit5最終版本即將來臨 (當前是M4),我已經開始嘗試如何編寫擴展了。

在JUnit5中 ,您沒有使用Runners , Rules , ClassRules等,而是只有一個Extension API來實現自己的擴展。

JUnit5提供了多個接口來掛鉤其生命周期。 例如,您可以掛鉤到“ 測試實例后處理”以在測試實例上調用自定義初始化方法,或者通過“ 參數解析”來在運行時動態解析測試方法參數。 當然,到目前為止,典型的操作如在執行所有測試之前,執行測試之前,執行測試之后進行掛接等等,可以在http://junit.org/junit5/docs/找到完整列表。 當前/用戶指南/#extensions-lifecycle-callbacks

但是,在每個過程中都在過程的哪一點執行? 為了測試它,我剛剛創建了一個擴展,該擴展實現了所有接口,并且每個方法都會打印出誰。

public class LoggerExtension implements TestInstancePostProcessor, ParameterResolver, BeforeAllCallback,BeforeEachCallback, BeforeTestExecutionCallback, AfterEachCallback, AfterTestExecutionCallback, AfterAllCallback,TestExecutionExceptionHandler {@Overridepublic void postProcessTestInstance(Object testInstance, ExtensionContext context) throws Exception {System.out.println("Test Instance Post-processing called");}@Overridepublic boolean supports(ParameterContext parameterContext, ExtensionContext extensionContext)throws ParameterResolutionException {System.out.println("Parameter Resolver Supports called");return parameterContext.getParameter().getType().equals(String.class);}@Overridepublic Object resolve(ParameterContext parameterContext, ExtensionContext extensionContext)throws ParameterResolutionException {System.out.println("Resolver called");return "Hello World";}@Overridepublic void beforeAll(ContainerExtensionContext context) throws Exception {System.out.println("Before All called " + context.getTestClass().get());}@Overridepublic void beforeEach(TestExtensionContext context) throws Exception {System.out.println("Before Each called");}@Overridepublic void beforeTestExecution(TestExtensionContext context) throws Exception {System.out.println("Before Test Execution called");}@Overridepublic void afterEach(TestExtensionContext context) throws Exception {System.out.println("After Each called");}@Overridepublic void afterTestExecution(TestExtensionContext context) throws Exception {System.out.println("After Test Executon called");}@Overridepublic void afterAll(ContainerExtensionContext context) throws Exception {System.out.println("After All called");}@Overridepublic void handleTestExecutionException(TestExtensionContext context, Throwable throwable) throws Throwable {System.out.println("Test Execution Exception called");throw throwable;} }

然后,我創建了一個包含兩個測試的JUnit5測試套件:

@ExtendWith(LoggerExtension.class) public class AnotherLoggerExtensionTest {@Testpublic void test4() {System.out.println("Test 4");}}@ExtendWith(LoggerExtension.class) public class LoggerExtensionTest {@Testpublic void test1() {System.out.println("Test 1");}@Testpublic void test2(String msg) {System.out.println("Test 2 " + msg);}@Testpublic void test3() {System.out.println("Test 3");throw new IllegalArgumentException("");}}@RunWith(JUnitPlatform.class) @SelectClasses({LoggerExtensionTest.class, AnotherLoggerExtensionTest.class}) public class LoggerExtensionTestSuite { }

那么在執行此套件之后,輸出是什么? 讓我們來看看它。 請注意,出于可讀性考慮,我在終端輸出上添加了一些標注。

Before All called class AnotherLoggerExtensionTest Test Instance Post-processing called Before Each called Before Test Execution called Test 4 After Test Execution called After Each called After All called// <1>Before All called class LoggerExtensionTest Test Instance Post-processing called Before Each called Before Test Execution called Test 1 After Test Execution called After Each called// <2>Test Instance Post-processing called Before Each called Before Test Execution called Parameter Resolver Supports called Resolver called Test 2 Hello World After Test Execution called After Each called// <3>Test Instance Post-processing called Before Each called Before Test Execution called Test 3 Test Execution Exception called After Test Execution called After Each called// <4>After All called

<1>運行它的第一個測試是AnotherLoggerExtensionTest 。 在這種情況下,只有一個簡單的測試,因此擴展的生命周期為BeforeAll , Test Instance-Post-Processing , Before Each , Before Test Execution ,然后執行測試本身,然后執行所有After回調。

<2>然后執行LoggerExtensionTest 。 第一次測試不是參數化測試,因此不會調用與參數解析有關的事件。 在執行test方法之前,將調用測試實例后處理 ,然后再引發所有事件之前。 最終,所有后續事件都將執行測試。

<3>第二個測試包含需要參數解析。 參數解析器在Before事件之后和執行測試本身之前運行。

<4>最后一次測試將引發異常。 在執行測試之后但在After事件之前調用Test Execution Exception 。

最后要注意的是, BeforeAll和AfterAll事件是按測試類而不是套件執行的。

本示例中使用的JUnit版本是org.junit.jupiter:junit-jupiter-api:5.0.0-M4

翻譯自: https://www.javacodegeeks.com/2017/06/lifecycle-junit-5-extension-model.html

擴展 junit 框架

總結

以上是生活随笔為你收集整理的扩展 junit 框架_JUnit 5扩展模型的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品国产三级国产普通话对白 | 毛片大片| 日本肉体xxxⅹ裸体交 | 疯狂做爰的爽文多肉小说王爷 | 另类视频在线观看 | 粉嫩av一区二区 | 国产亚洲欧美精品久久久久久 | 国产偷啪 | 中文国产视频 | 人人九九精品 | 亚洲高清自拍 | 国产精品国产三级国产专播品爱网 | av这里只有精品 | 亚洲香蕉中文网 | 性久久久| 日韩在线视频网站 | 国产黄色精品视频 | 5566毛片| a级黄色片免费看 | 亚洲av永久中文无码精品综合 | 蜜桃视频一区二区三区 | 玖玖爱资源站 | 久久精品动漫 | 亚洲最大福利 | 99视频在线免费观看 | xxxx国产片 | 播放毛片 | 涩色网站 | 大肉大捧一进一出好爽 | 国产精品爽爽久久 | 欧美激情自拍偷拍 | 精品无码一区二区三区 | 91精品国产高潮对白 | 春色影视 | 欧美有码在线 | 精品在线视频观看 | 黄色三级片毛片 | 亚洲欧美日韩精品永久在线 | jizz18国产| 少妇高潮一区二区三区99小说 | 日本一区二区三区网站 | 日本在线精品视频 | 在线免费观看污片 | 国产丰满麻豆 | 超碰个人在线 | 国产波霸爆乳一区二区 | 特大黑人娇小亚洲女mp4 | 韩日成人 | 久久丫丫 | 天天草天天干 | 无遮挡在线观看 | 人人草人人搞 | 在线a毛片 | 久草综合在线 | 免费观看一级一片 | 亚洲黄业 | 国产色频 | 少妇丰满尤物大尺度写真 | www国产精品内射老熟女 | 人人爱人人艹 | 国产精品久久久久久亚洲色 | 精品黑人一区二区三区在线观看 | 亚洲精品美女久久久 | 熟妇的味道hd中文字幕 | 日韩免费播放 | 天天操人人爽 | 五月天视频网站 | 色天使亚洲 | 99久久久久成人国产免费 | 久久久久久18 | 国产黄色大片在线观看 | 怡红院av久久久久久久 | 日韩精品不卡 | 淫片aaa| 91干| 国产区二区 | 欧美视频直播网站 | 日本一区二区免费视频 | 尹人久久| 久久国产精品久久久久久 | 国产精品麻豆入口 | 精品日韩一区二区 | 性色av蜜臀av浪潮av老女人 | 国产一区二区三区麻豆 | 国产一毛片 | 天天射寡妇射 | 伊人影视在线 | 欧美美女色图 | 国产精品老女人 | www.日韩在线观看 | 国内精品免费视频 | www.999热| 亚洲AV无码精品黑人黑人 | 欧美黄色a视频 | 999精品在线观看 | 日韩欧美视频在线播放 | 99国产精品久久久久久久成人 | 在线免费中文字幕 | 黄色一级图片 |