# 測試初體驗
## 104 共用工程部 簡佳恩
---
## 自我介紹
簡佳恩
興趣:爬山,露營,籃球
三年程式開發經驗:
- 網路爬蟲(2 年)
- 網頁後端(約 1 年)
---
1. 學了什麼
2. 專案實作
---
## 學了什麼

----

---
### 學習目標(ㄧ)
- PHP
- Composer
- 學習成果?
----
#### 多人玩的終極密碼(cmd 版)
- 可選擇玩家人數,場數
- 隨機選擇起始玩家,之後依場次更換起始玩家
- 先到獲勝場數的玩家獲勝
----

----
##### 經歷三階段
##### 寫邏輯 -> 重構 -> 寫測試
----
##### 寫邏輯
----
- 階段一
- 實作遊戲邏輯
- 使用基礎語法
- 直線式思考,一條龍搞定
----
##### Composer 應用
----
- 階段 1.5
- Composer 應用
- Symfony
- Carbon
----
#### 重構?
----
- 階段二
- 成功模組化:互動介面跟遊戲邏輯分開
- 將程式搬到 Laravel Commands
----
#### 開發流程

----
#### 寫測試
----
- 階段三
- 寫單元測試
- 模組化有助於測試撰寫
----
#### 開發流程

---
### 學習目標(二)
PHPUnit
----
#### 為什麼要單元測試
- 確認程式是照著自己的預期執行
- 修改後的測試較完整、避免改 A 壞 B
- 程式易於模組化
----
#### 3A 原則
- Arrange: 初始化
- Act: 執行測試的目標,獲得測試結果
- Assert: 驗證結果
----
#### 3A 範例

----
#### 測試結果


---
### 學習目標(三)
Laravel 框架
- 學習內容
- Laravel 官方文件
- 學習方法
- 做中學,學中做
- 學習筆記
----
#### 工作專案實作
- 翻寫 API * 5
- 協助手機驗證開發
----
#### 實際開發步驟
以 某隻API 為例

----
#### 先寫 Commands 好處
- 可以當作一種測試方式
- 可以規避掉 middleware 限制
- 利於模組化
- 寫了不用刪,外面的人用不到
----
#### 實戰應用 (Mock)

----
#### 實戰應用 (Spy)

----
#### 學習筆記

----
#### 測試相關

----
#### 網址
https://ithelp.ithome.com.tw/users/20141109/ironman/4412

{"metaMigratedAt":"2023-06-16T14:27:08.145Z","metaMigratedFrom":"YAML","title":"測試初體驗","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"fcf7bff7-3397-473c-913c-8133be5eaaef\",\"add\":2452,\"del\":547},{\"id\":\"ac882c88-670c-4198-b8b1-87dea01f7288\",\"add\":20,\"del\":6},{\"id\":\"da5efda3-757d-48aa-b560-2b11e410adf8\",\"add\":28,\"del\":0}]"}