摘要:新建計量單位類別測試保存這里我們調用了方法,但是并沒有提示我們需要捕獲異常,但是并不代表這個方法不拋出異常,可以拋出非檢查的或其派生的異常。基礎測試數據準備測試保存,期待拋出異常斷言捕獲異常為真運行測試,通過。
白盒測試
白盒測試,要求對代碼中的每行代碼至少覆蓋一次。
@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,然后調用它的Hibernate就catch了這個異常,并用該異常構建了一個新的異常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入門 今天在慕課網中看見了Spring Boot這么一個教程,這個Spring Boot作為JavaWeb的學習者肯定至少會聽過,但我是不知道他是什么玩意。 只是大...
摘要:介紹什么是在軟件業,為的縮寫,意為面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。切面是切入點和通知引介的結合。切面類權限校驗。。。 1. AOP 1.1 AOP介紹 1.1.1 什么是AOP 在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術...
摘要:在上面打開一個微服務某個實例的一個路徑的斷路器之后,我們調用其他的路徑,無論多少次,都成功并且調用負載均衡器獲取服務實例的次數等于調用次數,代表沒有重試,也就是沒有斷路器異常。 本系列代碼地址:??https://github.com/JoJoTec/spring-cloud-parent??我們來測試下前面封裝好的 We...
摘要:但是,一個好的單元測試應該是毫秒級的,否則這會影響的工作方式,這也就是測試驅動開發的思想。在單元測試中,我們可以像這樣來構建一個實例。所以,我們在寫單元測試的時候,應該以一種更簡單的方式去構建。 本文翻譯自:https://reflectoring.io/unit-...原文作者:Tom Hombergs 譯文原地址:https://weyunx.com/2019/02/04... ...
閱讀 3921·2021-11-17 09:33
閱讀 3283·2021-10-08 10:05
閱讀 3111·2021-09-22 15:36
閱讀 1140·2021-09-06 15:02
閱讀 2772·2019-08-29 12:45
閱讀 1590·2019-08-26 13:40
閱讀 3399·2019-08-26 13:37
閱讀 420·2019-08-26 13:37