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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

处理JUnit中异常的另一种方法:catch-exception

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理JUnit中异常的另一种方法:catch-exception 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JUnit中有許多處理異常的方法 (JUnit中有3種處理異常的方法。選擇哪一種呢? JUnit ExpectedException規則:超越了基礎 )。 在本文中,我將介紹建議嘗試的catch-exception庫。 簡而言之, catch-exceptions是一個庫,可在一行代碼中捕獲異常,并使它們可用于進一步分析。

通過Maven安裝

為了快速入門,我使用了帶有一組測試依賴項( JUnit,Mocito,Hamcrest,AssertJ )的單元測試演示項目,并添加了catch-exceptions :

<dependency><groupId>com.googlecode.catch-exception</groupId><artifactId>catch-exception</artifactId><version>1.2.0</version><scope>test</scope> </dependency>

因此,依賴關系樹如下所示:

[INFO] --- maven-dependency-plugin:2.1:tree @ unit-testing-demo --- [INFO] com.github.kolorobot:unit-testing-demo:jar:1.0.0-SNAPSHOT [INFO] +- org.slf4j:slf4j-api:jar:1.5.10:compile [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.5.10:runtime [INFO] +- org.slf4j:slf4j-log4j12:jar:1.5.10:runtime [INFO] +- log4j:log4j:jar:1.2.15:runtime [INFO] +- junit:junit:jar:4.11:test [INFO] +- org.mockito:mockito-core:jar:1.9.5:test [INFO] +- org.assertj:assertj-core:jar:1.5.0:test [INFO] +- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] +- org.hamcrest:hamcrest-library:jar:1.3:test [INFO] +- org.objenesis:objenesis:jar:1.3:test [INFO] \- com.googlecode.catch-exception:catch-exception:jar:1.2.0:test

入門

被測系統(SUT):

class ExceptionThrower {void someMethod() {throw new RuntimeException("Runtime exception occurred");}void someOtherMethod() {throw new RuntimeException("Runtime exception occurred",new IllegalStateException("Illegal state"));}void yetAnotherMethod(int code) {throw new CustomException(code);} }

帶有AssertJ斷言的基本catch-exception BDD樣式方法示例:

import org.junit.Test;import static com.googlecode.catchexception.CatchException.*; import static com.googlecode.catchexception.apis.CatchExceptionAssertJ.*;public class CatchExceptionsTest {@Testpublic void verifiesTypeAndMessage() {when(new SomeClass()).someMethod();then(caughtException()).isInstanceOf(RuntimeException.class).hasMessage("Runtime exception occurred").hasMessageStartingWith("Runtime").hasMessageEndingWith("occured").hasMessageContaining("exception").hasNoCause(); } }

看起來不錯。 簡潔,可讀。 沒有JUnit運行者。 請注意,我指定了我希望引發異常的SomeClass方法。 可以想象,我可以在一個測試中檢查多個異常。 盡管我不推薦這種方法,因為這可能違反了測試的單一責任。

順便說一句,如果您正在使用Eclipse,這可能對您來說很方便: 在Eclipse中創建JUnit測試時,改進具有靜態成員類型的內容輔助

查明原因

我認為以下代碼無需評論:

import org.junit.Test;import static com.googlecode.catchexception.CatchException.*; import static com.googlecode.catchexception.apis.CatchExceptionAssertJ.*;public class CatchExceptionsTest {@Testpublic void verifiesCauseType() {when(new ExceptionThrower()).someOtherMethod();then(caughtException()).isInstanceOf(RuntimeException.class).hasMessage("Runtime exception occurred").hasCauseExactlyInstanceOf(IllegalStateException.class).hasRootCauseExactlyInstanceOf(IllegalStateException.class);} }

驗證Hamcrest的自定義例外

為了驗證我用我以前的Hamcrest匹配代碼自定義異常后 :

class CustomException extends RuntimeException {private final int code;public CustomException(int code) {this.code = code;}public int getCode() {return code;} }class ExceptionCodeMatches extends TypeSafeMatcher<CustomException> {private int expectedCode;public ExceptionCodeMatches(int expectedCode) {this.expectedCode = expectedCode;}@Overrideprotected boolean matchesSafely(CustomException item) {return item.getCode() == expectedCode;}@Overridepublic void describeTo(Description description) {description.appendText("expects code ").appendValue(expectedCode);}@Overrideprotected void describeMismatchSafely(CustomException item, Description mismatchDescription) {mismatchDescription.appendText("was ").appendValue(item.getCode());} }

和測試:

import org.junit.Test;import static com.googlecode.catchexception.CatchException.*; import static org.junit.Assert.*;public class CatchExceptionsTest {@Testpublic void verifiesCustomException() {catchException(new ExceptionThrower(), CustomException.class).yetAnotherMethod(500);assertThat((CustomException) caughtException(), new ExceptionCodeMatcher(500));} }

摘要

捕獲異常看起來真的很好。 快速入門很容易。 我看到了一些優于JUnit方法規則的優點。 如果有機會,我將更徹底地調查圖書館,希望在一個實際項目中進行。

  • 可以在這里找到本文的源代碼: 單元測試演示

如果您有興趣,請查看我的其他帖子:

  • 在JUnit中處理異常的3種方法。 選擇哪一個?
  • JUnit ExpectedException規則:超越基礎
  • 如何:在Maven項目(JUnit,Mocito,Hamcrest,AssertJ)中測試依賴項
  • 在Eclipse中創建JUnit測試時,改進具有靜態成員類型的內容輔助

翻譯自: https://www.javacodegeeks.com/2014/04/yet-another-way-to-handle-exceptions-in-junit-catch-exception.html

總結

以上是生活随笔為你收集整理的处理JUnit中异常的另一种方法:catch-exception的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩成人一区二区三区 | 久久视频国产 | 国产无毛av | 91免费.| 欧美影院久久 | www.xxxx欧美 | 日韩久久久久 | 91视频在线网站 | 日本黄色播放器 | 欧美www | 青青草福利 | 国产精品婷婷午夜在线观看 | 日韩精品视频免费在线观看 | 四虎视频在线 | 精品国产18久久久久久 | 亚洲一区二区精品视频 | h视频在线观看网站 | 日韩精品亚洲一区 | 欧美国产视频一区 | 午夜激情导航 | 欧美又黑又粗 | 特级黄毛片 | 欧美亚洲天堂网 | wwwxxxx欧美 | 色婷婷激情综合 | 国产老头户外野战xxxxx | 丰满岳乱妇一区二区三区 | 夜夜爽妓女8888视频免费观看 | 97中文字幕在线观看 | 在线精品一区 | 国产日韩大片 | 成人免费毛片果冻 | 欧美一级鲁丝片 | 嫩草伊人久久精品少妇av | 97视频久久 | 国产做爰免费观看 | 看av网 | 涩涩网站在线看 | 日韩欧av| 日本精品视频在线播放 | 午夜小电影 | 国产日韩欧美成人 | 欧美极品视频在线观看 | 九九九九九精品 | 北条麻妃99精品青青久久 | 中文精品一区 | 国产另类ts人妖一区二区 | 在线成人黄色 | 亚洲情侣在线 | 色奇米| 免费在线观看视频 | 亚洲免费观看高清 | 一本之道高清无码视频 | 久久最新视频 | 日韩视频在线观看免费视频 | 欧美日韩国产一级片 | 都市激情校园春色 | 日本69av | 日韩免费在线视频观看 | 丁香花五月天 | 美女脱光衣服让男人捅 | 欧美成人小视频 | 91网站永久免费看nba视频 | 妺妺窝人体色777777 | 久久久久久国产精品日本 | 色亚洲成人 | 一区二区高清在线观看 | 狠狠干夜夜爽 | 欧美青青草 | 国产午夜精品一区二区理论影院 | 日干夜干天天干 | 国产一级片久久 | 激情婷婷小说 | 鲁鲁在线| 丰满岳跪趴高撅肥臀尤物在线观看 | 久久无码人妻丰满熟妇区毛片 | sese在线视频 | 国产黄色录像片 | 国产一区免费观看 | 国产3p精品一区 | 亚洲视频欧美 | 中文字幕一区二区三三 | 大色av| 日日舔夜夜操 | 久久影院国产 | 国产999在线| 日韩视频免费播放 | 无码人妻丰满熟妇啪啪欧美 | 性高潮久久久久久 | 韩国一级片在线观看 | 色爽 av| 91丝袜一区二区三区 | 欧美日韩在线观看免费 | 日本一二三视频 | 亚洲精品久久久久久久蜜桃 | 人妖性生活视频 | 日韩一级片一区二区 | 免费成人av在线 | ass东方小嫩模pics |