摘要:新建計量單位類別測試保存這里我們調(diào)用了方法,但是并沒有提示我們需要捕獲異常,但是并不代表這個方法不拋出異常,可以拋出非檢查的或其派生的異常?;A(chǔ)測試數(shù)據(jù)準(zhǔn)備測試保存,期待拋出異常斷言捕獲異常為真運行測試,通過。
白盒測試
白盒測試,要求對代碼中的每行代碼至少覆蓋一次。
@ApiModelProperty("學(xué)科類別") @ManyToOne // 設(shè)置學(xué)科類別字段不能為空 @JoinColumn(nullable = false) @JsonView({NoneJsonView.class, MeasurementUnitCategoryJsonView.getAllByDisciplineId.class}) private Discipline discipline;錯誤信息測試
以之前對學(xué)科設(shè)置不為空為例,我們需要測試兩種情況,為空時的異常和不為空時保存正常。
@Test public void saveTest() { logger.debug("新建計量單位類別"); MeasurementUnitCategory measurementUnitCategory = new MeasurementUnitCategory(); logger.debug("測試保存"); measurementUnitCategoryService.save(measurementUnitCategory); }
這里我們調(diào)用了save方法,但是IDE并沒有提示我們需要捕獲異常,但是并不代表這個save方法不拋出異常,可以拋出非檢查的RuntimeException或其派生的異常。
為了測試這個異常,我們首先運行這行代碼,看看出現(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]
我們看到有三個異常,先是插入這條記錄時的JdbcSQLException,然后該異常引起了ConstraintViolationException,新異常又引起了DataIntegrityViolationException。
當(dāng)?shù)讓訏伋隽艘粋€JdbcSQLException,然后調(diào)用它的Hibernate就catch了這個異常,并用該異常構(gòu)建了一個新的異常ConstraintViolationException(限制違反異常),然后再向上層拋出,再到上層Spring捕獲,構(gòu)建新異常DataIntegrityViolationException并拋給了我們,我們沒有處理,然后控制臺就報錯了。
捕獲異常好了,我們這里需要捕獲的異常就是Spring拋給我們的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(); }
運行測試,通過。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69678.html
摘要:熱加載代表的是我們不需要重啟服務(wù)器,就能夠類檢測得到,重新生成類的字節(jié)碼文件無論是熱部署或者是熱加載都是基于類加載器來完成的。驗證階段字節(jié)碼文件不會對造成危害準(zhǔn)備階段是會賦初始值,并不是程序中的值。 一、SpringBoot入門 今天在慕課網(wǎng)中看見了Spring Boot這么一個教程,這個Spring Boot作為JavaWeb的學(xué)習(xí)者肯定至少會聽過,但我是不知道他是什么玩意。 只是大...
摘要:請注意,我們在聊聊單元測試遇到問題多思考多查閱多驗證,方能有所得,再勤快點樂于分享,才能寫出好文章。單元測試是指對軟件中的最小可測試單元進行檢查和驗證。 JAVA容器-自問自答學(xué)HashMap 這次我和大家一起學(xué)習(xí)HashMap,HashMap我們在工作中經(jīng)常會使用,而且面試中也很頻繁會問到,因為它里面蘊含著很多知識點,可以很好的考察個人基礎(chǔ)。但一個這么重要的東西,我為什么沒有在一開始...
摘要:介紹什么是在軟件業(yè),為的縮寫,意為面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。切面是切入點和通知引介的結(jié)合。切面類權(quán)限校驗。。。 1. AOP 1.1 AOP介紹 1.1.1 什么是AOP 在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)...
摘要:在上面打開一個微服務(wù)某個實例的一個路徑的斷路器之后,我們調(diào)用其他的路徑,無論多少次,都成功并且調(diào)用負載均衡器獲取服務(wù)實例的次數(shù)等于調(diào)用次數(shù),代表沒有重試,也就是沒有斷路器異常。 本系列代碼地址:??https://github.com/JoJoTec/spring-cloud-parent??我們來測試下前面封裝好的 We...
摘要:但是,一個好的單元測試應(yīng)該是毫秒級的,否則這會影響的工作方式,這也就是測試驅(qū)動開發(fā)的思想。在單元測試中,我們可以像這樣來構(gòu)建一個實例。所以,我們在寫單元測試的時候,應(yīng)該以一種更簡單的方式去構(gòu)建。 本文翻譯自:https://reflectoring.io/unit-...原文作者:Tom Hombergs 譯文原地址:https://weyunx.com/2019/02/04... ...
閱讀 4020·2021-11-17 09:33
閱讀 3311·2021-10-08 10:05
閱讀 3140·2021-09-22 15:36
閱讀 1179·2021-09-06 15:02
閱讀 2798·2019-08-29 12:45
閱讀 1624·2019-08-26 13:40
閱讀 3439·2019-08-26 13:37
閱讀 453·2019-08-26 13:37