国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring 異常單元測試

tracymac7 / 1747人閱讀

摘要:新建計量單位類別測試保存這里我們調用了方法,但是并沒有提示我們需要捕獲異常,但是并不代表這個方法不拋出異常,可以拋出非檢查的或其派生的異常。基礎測試數據準備測試保存,期待拋出異常斷言捕獲異常為真運行測試,通過。

白盒測試

白盒測試,要求對代碼中的每行代碼至少覆蓋一次。

@ApiModelProperty("學科類別")
@ManyToOne
// 設置學科類別字段不能為空
@JoinColumn(nullable = false)
@JsonView({NoneJsonView.class,
        MeasurementUnitCategoryJsonView.getAllByDisciplineId.class})
private Discipline discipline;
錯誤信息測試

以之前對學科設置不為空為例,我們需要測試兩種情況,為空時的異常和不為空時保存正常。

@Test
public void saveTest() {
    logger.debug("新建計量單位類別");
    MeasurementUnitCategory measurementUnitCategory = new MeasurementUnitCategory();

    logger.debug("測試保存");
    measurementUnitCategoryService.save(measurementUnitCategory);
}

這里我們調用了save方法,但是IDE并沒有提示我們需要捕獲異常,但是并不代表這個save方法不拋出異常,可以拋出非檢查的RuntimeException或其派生的異常。

為了測試這個異常,我們首先運行這行代碼,看看出現什么異常。

異常拋出

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "DISCIPLINE_ID"; SQL statement:
insert into measurement_unit_category (id, discipline_id, is_asc) values (null, ?, ?) [23502-194]

我們看到有三個異常,先是插入這條記錄時的JdbcSQLException,然后該異常引起了ConstraintViolationException,新異常又引起了DataIntegrityViolationException

當底層拋出了一個JdbcSQLException,然后調用它的Hibernatecatch了這個異常,并用該異常構建了一個新的異常ConstraintViolationException(限制違反異常),然后再向上層拋出,再到上層Spring捕獲,構建新異常DataIntegrityViolationException并拋給了我們,我們沒有處理,然后控制臺就報錯了。

捕獲異常

好了,我們這里需要捕獲的異常就是Spring拋給我們的DataIntegrityViolationException異常。

@Test
public void saveTest() {
    logger.debug("基礎測試數據準備");
    MeasurementUnitCategory measurementUnitCategory = new MeasurementUnitCategory();
    Boolean catchException = false;

    logger.debug("測試保存,期待拋出異常");
    try {
        measurementUnitCategoryService.save(measurementUnitCategory);
    } catch (DataIntegrityViolationException e) {
        catchException = true;
    }

    logger.debug("斷言捕獲異常為真");
    assertThat(catchException).isTrue();
}

運行測試,通過。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69678.html

相關文章

  • SpringBoot就是這么簡單

    摘要:熱加載代表的是我們不需要重啟服務器,就能夠類檢測得到,重新生成類的字節碼文件無論是熱部署或者是熱加載都是基于類加載器來完成的。驗證階段字節碼文件不會對造成危害準備階段是會賦初始值,并不是程序中的值。 一、SpringBoot入門 今天在慕課網中看見了Spring Boot這么一個教程,這個Spring Boot作為JavaWeb的學習者肯定至少會聽過,但我是不知道他是什么玩意。 只是大...

    whinc 評論0 收藏0
  • Java經典

    摘要:請注意,我們在聊聊單元測試遇到問題多思考多查閱多驗證,方能有所得,再勤快點樂于分享,才能寫出好文章。單元測試是指對軟件中的最小可測試單元進行檢查和驗證。 JAVA容器-自問自答學HashMap 這次我和大家一起學習HashMap,HashMap我們在工作中經常會使用,而且面試中也很頻繁會問到,因為它里面蘊含著很多知識點,可以很好的考察個人基礎。但一個這么重要的東西,我為什么沒有在一開始...

    xcold 評論0 收藏0
  • Spring筆記03_AOP

    摘要:介紹什么是在軟件業,為的縮寫,意為面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。切面是切入點和通知引介的結合。切面類權限校驗。。。 1. AOP 1.1 AOP介紹 1.1.1 什么是AOP 在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術...

    blair 評論0 收藏0
  • SpringCloud升級之路2020.0.x版-40. spock 單元測試封裝的 WebClie

    摘要:在上面打開一個微服務某個實例的一個路徑的斷路器之后,我們調用其他的路徑,無論多少次,都成功并且調用負載均衡器獲取服務實例的次數等于調用次數,代表沒有重試,也就是沒有斷路器異常。 本系列代碼地址:??https://github.com/JoJoTec/spring-cloud-parent??我們來測試下前面封裝好的 We...

    番茄西紅柿 評論0 收藏2637
  • Spring Boot 單元測試二三事

    摘要:但是,一個好的單元測試應該是毫秒級的,否則這會影響的工作方式,這也就是測試驅動開發的思想。在單元測試中,我們可以像這樣來構建一個實例。所以,我們在寫單元測試的時候,應該以一種更簡單的方式去構建。 本文翻譯自:https://reflectoring.io/unit-...原文作者:Tom Hombergs 譯文原地址:https://weyunx.com/2019/02/04... ...

    xbynet 評論0 收藏0

發表評論

0條評論

tracymac7

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<