UnitTest(3)- Junit 5 常用註解
Junit 5 常用註解
@Test:標註方法為測試程試
@BeforeEach:每項測試項目開始前都會執行一次
@AfterEach:每項測試項目結束都會執行一次
@BeforeAll:測試開始之前執行一次
@AfterAll:測試結束之後執行一次
@Disabled:不列入測試項目
@DisplayName:測試結果顯示特定名稱
延伸先前計算相關的方法測試,我們補齊加減乘除各種方法跟測試
123456789101112131415161718192021public class Calculator { public int add(int x, int y) { return x + y; } public int subtract(int x, int y) { return x - y; } public int multiply(int x, int y) { return x * y; } public int div ...
UnitTest(2) - Junit 5 測試方法與斷言應用
上一篇簡單說明基本測試的概念跟要怎麼建立測試程式在 Spring Boot 之後,這邊就來接著提供一些測試的設計原則和一些方法。
3A 原則 (3A Pattern)
Arrange: 初始化物件、要用到的參數
Act: 呼叫要測試的方法
Assert: 驗證測試結果
如果以上一篇的範例來看,我們要測試加法的功能會這樣設計就是應用到 3A 原則
Arrange:首先就是要先建立好測試的環境,把要用到的物件初始化,建立好相關的參數,也就是我們引入 Calculator 這個物件進入並且建立好要執行加法的參數。
Act:接著呼叫測試的方法並且帶入我們要的參數
Assert:利用斷言的方法來驗證,是否符合預期
12345678910111213141516class CalculatorTest { @Test void testAdd() { // Arange Calculator calc = new Calculator(); int x = 1; int y = 1; ...
UnitTest(1) - Junit 5 基本介紹及建立測試程式
相信有許多人知道開發有一個重要的環節就是進行測試,不管是透過直接操作功能、打 API 或是程式內部執行測是程式等等都是測試的一種,今天要介紹的單元測試就是指測試程式碼最小功能單位的運作。
單元測試目的
測試功能運作邏輯
確保不會改壞程式
單元測試特性
一次只測一個功能點或一個 api
可被自動化運行
各單元測試互相獨立,不依賴
JUnit 5 介紹Java 常見的開源測試框架,目前最新版本為 JUnit5,使用了 Java 8 及更高版本的 Java 語言特性。 進行單元測試的可讀性更強,編寫更容易,且可以輕鬆擴充。
版本相容注意
Spring Boot 版本
相容的 JUnit 版本
≤ 2.1
JUnit 4
2.2, 2.3
JUnit 4、JUnit 5
≥ 2.4
JUnit 5
Spring Boot 導入 JUnit通常只要建立一般 web 的專案就會導入 spring-boot-starter-test 裡面就會包含 Junit 測試框架了
12345<dependency> <groupId>org.spring ...
Lombok
前面在介紹使用 Spring Data JPA 的時候,在關聯的部分有碰到一些使用 Lombok 的問題,這篇就來介紹一下個別的註解作用,也可以讓大家使用的時候也知道背後運作的邏輯。
Lombok 是一個套件可以幫助我們定義物件時省去許多重複冗長的 code ,可以大幅提升開發效率,下面是常見的註解。
套件引入12345<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional></dependency>
常用註解介紹
小補充: 其實有很多方法如果是用 Intellij 都可以在物件內點選右鍵使用 generate 產生,但是如果可以用一個註解就解決這些還是來得方便很多,但建議剛開始新手可以先用這些 generate 來產生對應方法,也可以藉此了解每個註解背後的原始 code 是怎麼運作。
@Getter / @Setter ...
Spring Data JPA (4) 資料庫關聯 1 : N
一對多 1 : N一對多關聯可以看到,products 和 reviews 這兩張表的關係,一個商品會有多則評論,所以設計上會在 reviews 裡面紀錄 product_id 來關聯回去 products。會應用到 @OneToMany @ManyToOne 這兩種註解來根據你是哪一方進行關聯。
建立父實體 reviews,標記 @ManyToOne
123456789101112131415@Entity@Data@Table(name = "reviews")@JsonIgnoreProperties({"product"})public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String comment; private int rating; @ManyToOne @JoinColumn(name = " ...
Spring Data JPA (3) 資料庫關聯 1 : 1
操作 Spring Data JPA 需要對於資料表之間的關聯與配置有一定的了解,可以幫助你在規劃資料庫及撈取資料上有很大的幫助。
後續文章會依序介紹常見的幾種關聯操作,若這邊設計一個情境開設一個電商平台,賣電玩的商品,會有一些表紀錄商品的一些資訊,我們可以藉此來探討資料表之間的關聯。主要有下面這幾張表:
products 商品資訊,記錄名稱 (name)、價錢 (price)、描述 (description)等資訊
product_details 商品細節,紀錄開發商 (developer)、發行商 (publisher)、發行日 (release_date)、支援語言 (language_support)等資訊
reviews 評論,紀錄評論者 (reviewer_name)、內容 (comment)、分數 (rating)
tags 標籤,遊戲類型及各式分類標註 (name)
product_tags 商品及標籤的關聯表 (多對多需要)
關聯配置相關參數介紹關聯時必須知道誰是父實體(或稱維護方,具有 FK 可以關聯被維護 PK),誰是子實體(被維護、被參考對象)
父 ...
Spring Data JPA (2) 資料庫查詢應用
這邊來認識一些我們可能會用到的一些資料庫查詢操作
根據前面的 products 結構來插入一些資料熟悉一些操作的用法吧。
123456789101112INSERT INTO products (name, price, description) VALUES('薩爾達傳說:曠野之息', 59.99, '設定在幻想世界中的開放世界動作冒險遊戲。'),('超級瑪利歐:奧德賽', 49.99, '以瑪利歐為主角的平臺遊戲,探索各種世界。'),('集合啦!動物森友會', 54.99, '在無人島上進行發展的生活模擬遊戲。'),('最終幻想 VII 重製版', 69.99, '經典 RPG 的重製版,具有更新的圖像和遊戲玩法。'),('巫師3:狂獵', 39.99, '開放世界 RPG,玩家扮演狩魔獵人傑洛特。'),('電馭叛客2077', 59.99, '設定在反烏 ...
Spring Data JPA(1)基礎應用架構
前面已經介紹過各類資料操作框架的特色之後,這邊來介紹其中我比較熟悉也蠻多人使用的 Spring Data Jpa,雖然比較不用寫 SQL 所以可能會對於 SQL 掌握比較少,但我覺得透過物件的方式來操作資料也是本身 Java 的特色之一,搭配 Spring Boot 能夠整合在框架中使用是很方便的
使用前概念根據常用開發架構的 MVC 架構,資料庫的部分主要是由 Model 層部分進行處理,這邊對應在 Spring Boot 的開發上會放在 Dao 和 Service,Dao 主要是定義我們與資料庫的溝通連結,在 Spring Data Jpa 主要就是繼承 JpaRepository 去處理資料的存取,最後將拿到得資料返回給 Service 進行業務邏輯的操作或是資料的組裝,最後回給 Controller。
引入套件pom.xml 加入下面套件,spring-boot-starter-data-jpa 就是我們要使用的 JPA 套件,另外一個則是 mysql 連線用的套件,可以根據使用不同資料庫做更換
12345678910 <dependency> ...
Spring Data JPA, JDBC Template, Mybatis 比較
今天就來認識一下使用 Spring Boot 的時候可能會碰到的三種資料存取框架 Spring Data JPA、JDBC Template 和 MyBatis ,他們都各有其特色和適合的應用場景,當你需要碰到資料庫的處理,肯定需要來了解一下。
Spring Data JPA特點:
ORM 的框架:將資料庫表格映射到我們定義的 Java 物件上面,並提供自動化的資料庫操作。資料操作可以用物件的概念還進行操作,程式碼具物件特性和可讀性。
簡化資料存取:透過 JPA((Java Persistence API),可自動根據操作的慣例來減少手動撰寫 SQL 的需求,例如 findById, findAll 等等的直觀方法可以直接進行操作,不需要另外定義。
支援 JPQL (Java Persistence Query Language): 提供類似 SQL 的查詢語言,但更強調物件導向,使用的是物件屬性而非資料庫欄位。
與 Spring 整合:由於是 Spring Framework 的一部分,與 Spring 框架可自然引入整合。
優點:
減少 SQL 操作的細節,並專注於物件導向設計時 ...
Spring MVC - Thymeleaf
這篇來補充一下一些 Spring MVC 的 View 的部分吧,這部分其實就是前端的處理,雖然業界許多已經前後端分離,所以後端只需要著重在 Spring Boot 本身的後端 Server 上進行資料的處理,但其實過去前後端整合 FullStack 的部分也是有許多公司仍在使用, Spring Boot 其實也有提供和許多前端模板整合的方式來進行全端的處理,所以這部分如果碰到也是需要
Thymeleaf
SpringBoot 推薦使用的 web 前端模板引擎
能夠輕鬆實現 MVC 架構並配合後端資料動態渲染前端頁面
可在 Html 中嵌入動態內容
其他類似的模板引擎: JSP, Freemarker, Groovy, Velocity 等
引入套件及配置pom.xml
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dep ...