最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 異常單元測試的解決

 更新時(shí)間:2018年06月07日 09:20:02   作者:張喜碩  
這篇文章主要介紹了Spring 異常單元測試的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

@ApiModelProperty("學(xué)科類別")
@ManyToOne
// 設(shè)置學(xué)科類別字段不能為空
@JoinColumn(nullable = false)
@JsonView({NoneJsonView.class,
    MeasurementUnitCategoryJsonView.getAllByDisciplineId.class})
private Discipline discipline;

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

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

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

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

為了測試這個(gè)異常,我們首先運(yùn)行這行代碼,看看出現(xiàn)什么異常。

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]

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

這個(gè)Caused by其實(shí)是異常的一種封裝,比如說底層,可能會拋出異常,但是我們一般都是在比較高的層面去處理異常。

就拿這個(gè)來舉例子,DataIntegrityViolationException數(shù)據(jù)違反異常,很多種可能都會產(chǎn)生這種異常,所以這種異常的處理方法都是相同或類似的。

當(dāng)?shù)讓訏伋隽艘粋€(gè)JdbcSQLException,然后調(diào)用它的方法就catch了這個(gè)異常,并用該異常構(gòu)建了一個(gè)新的異常ConstraintViolationException(限制違反異常),然后再向上層拋出,再到上層捕獲,構(gòu)建新異常DataIntegrityViolationException并拋給了我們,我們沒有處理,然后控制臺就報(bào)錯(cuò)了。

這樣一直封裝向上拋的好處就是我可以用一個(gè)異常來處理一類相似的情況,然后在處理這個(gè)異常的時(shí)候可以追根溯源,一直精確到是由什么引起的。如果沒有這個(gè)封裝的話,那我們需要直接去catch底層的異常才能精確地定位到錯(cuò)誤。

好了,我們這里需要捕獲的異常就是應(yīng)用拋給我們的DataIntegrityViolationException異常。

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

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

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

運(yùn)行測試,通過。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis動態(tài)SQL之where標(biāo)簽用法說明

    Mybatis動態(tài)SQL之where標(biāo)簽用法說明

    這篇文章主要介紹了Mybatis動態(tài)SQL之where標(biāo)簽用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • redis redisson 集合的使用案例(RList、Rset、RMap)

    redis redisson 集合的使用案例(RList、Rset、RMap)

    這篇文章主要介紹了redis redisson 集合的使用案例(RList、Rset、RMap),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 深入理解Java設(shè)計(jì)模式之中介者模式

    深入理解Java設(shè)計(jì)模式之中介者模式

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之中介者模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • Java date format時(shí)間格式化操作示例

    Java date format時(shí)間格式化操作示例

    這篇文章主要介紹了Java date format時(shí)間格式化操作,結(jié)合具體實(shí)例形式分析了java針對日期時(shí)間進(jìn)行格式化操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03
  • 深入學(xué)習(xí)java枚舉的應(yīng)用

    深入學(xué)習(xí)java枚舉的應(yīng)用

    本篇是關(guān)于java深入提高學(xué)習(xí)的相關(guān)知識,介紹了枚舉的應(yīng)用等方面內(nèi)容,有興趣的朋友參考學(xué)習(xí)下吧。
    2018-01-01
  • Java.lang.Long.parseLong()方法詳解及示例

    Java.lang.Long.parseLong()方法詳解及示例

    這個(gè)java.lang.Long.parseLong(String s) 方法解析字符串參數(shù)s作為有符號十進(jìn)制長,下面這篇文章主要給大家介紹了關(guān)于Java.lang.Long.parseLong()方法詳解及示例的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Springboot攔截filter中異常的處理

    Springboot攔截filter中異常的處理

    SpringBoot提供了全局異常處理機(jī)制可以攔截所有異常,包括Filter中的異常,本文主要介紹了Springboot攔截filter中異常的處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Springboot自帶線程池的實(shí)現(xiàn)

    Springboot自帶線程池的實(shí)現(xiàn)

    本文主要介紹了Springboot自帶線程池的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java檢查日期字符串是否合法的方法總結(jié)

    Java檢查日期字符串是否合法的方法總結(jié)

    后端接口在接收數(shù)據(jù)的時(shí)候,都需要進(jìn)行檢查。檢查全部通過后,才能夠執(zhí)行業(yè)務(wù)邏輯。本文總結(jié)了四個(gè)Java檢查日期字符串是否合法的方法,感興趣的可以了解一下
    2022-10-10
  • Java監(jiān)聽器的作用及用法代碼示例

    Java監(jiān)聽器的作用及用法代碼示例

    這篇文章主要介紹了Java監(jiān)聽器的作用及用法代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評論

安达市| 安徽省| 大邑县| 雷波县| 林西县| 康乐县| 鄄城县| 兴海县| 普洱| 全州县| 保定市| 揭阳市| 北宁市| 屏山县| 津南区| 河北区| 崇礼县| 芜湖县| 阜城县| 许昌县| 万源市| 浮梁县| 阳江市| 吴堡县| 高雄市| 新晃| 石楼县| 和龙市| 洮南市| 萨迦县| 化州市| 德清县| 金湖县| 开阳县| 娱乐| 武威市| 沅江市| 济源市| 丹寨县| 台中县| 营山县|