SlideShare a Scribd company logo
單元測試不是有寫就好
Kuma Syu -> 講者怕寂寞,歡迎發問或互動 XD
關於我
https://medium.com/kuma老師的軟體工程教室
2
-> 講者怕寂寞,歡迎發問或互動 XD
https://www.facebook.com/kukumamaya
https://www.youtube.com/@yu-songsyu6598/videos
「我有個朋友」出了一本書…
3
KUMA WARNING
本演講意在與聽眾分享本人近年來開發中,在嘗
試(踩坑)過各種單元測試寫法後,所歸納出的
分析、經驗,與建議,而不在手牽把手教你寫測
試,期待在此看到大量測試程式碼的同學,恐將
大失所望。為不耽誤您的青春,請趁其他教室關
門前前往。
4
實戰 Workshop 在此
你是不是像我…
寫了測試,但上線依然錯誤百出
寫了測試,但架構沒有比較乾淨
寫了測試,但沒有比較有時間
5
6
這是一個悲傷的故事…
7
問卷調查一下…
工作時,「不經常寫」單元測試的,請舉手!
Today We’ll Have…
何謂單元測試
好的單元測試
如何最小成本實踐
8
何謂單元測試?
Tests that can run
independent of one another
9
https://www.oreilly.com/library/view/test-driven-development/0321146530/
何謂單元測試?
Tests that can run
independent of one another
10
不影響彼此
同時跑也沒差
單元測試的目的
1. 保護程式,不被 QA 靠北
11
單元測試的目的
1. 保護功能
12
單元測試的目的
1. 保護功能
2. 幫助重構
13
程式重構了,那測試呢?
14
單元測試,不是有寫就好!
欠缺管理的單元測試,在 Code Base 長大後,拖慢速度的力道,與 Legacy
Code 不相上下。
15
單元測試也是程式
一樣也會錯、會有 Code Smell → 一樣要重構
「像維護產品程式碼一樣地維護測試程式碼。」
16
何謂「好的」單元測試
17
何謂「好的」單元測試
writable, fast, and specific.
18
https://medium.com/@kentbeck_7670/test-desiderata-94150638a4b3
「好的」單元測試 之 Kuma 的建議
1. 暴露意圖
2. 「適當且簡單」的檢查
3. 珍惜生命,遠離框架
4. 測功能,不要測類別 → 獨立於架構
19
暴露意圖
UserObj user = new UserObj();
user.setName(“Kuma”);
long userId = userMapper.insert(user);
AccountObj account = new Account();
account.setBalance(1,000);
account.setUser(user.getId());
accountMapper.insert(account);
account.getBalance(userId);
assertEquals(1,000, userId)
20
create_user(1,000);
when_get_balance();
then_result_is(1,000);
「適當且簡單」的檢查
有做該做的,沒做不該做的
何謂「不該做的」?
驗回傳 > 驗狀態 > 驗互動
21
驗互動
X Mocking
X 被程式實作綁架
“Tests should be structure-insensitive.”
22
Mockito.verify(kafkaClient.put(“t”, “hello world”), times(2));
驗互動
X Mocking
X 被程式實作綁架
“Tests should be structure-insensitive.”
Tip: 當不得不驗互動的場景越來越多,請回頭看看介面設計有什麼問題。
23
Mockito.verify(kafkaClient.put(“t”, “hello world”), times(2));
驗狀態
24
珍惜生命,遠離框架
1. 速度
2. 架構設計
25
7 s 到 200 ms 的故事
測功能,不要測類別(風格一)
26
測功能,不要測類別(風格二)
測試要與架構獨立
27
道理我都懂(吧),但實踐呢?
實踐:邊寫邊重構
程式功能
程式架構
測試
三點不動一點動
28
29
有喔:
30
A Quick Recap
何謂單元測試
好的單元測試
大師怎麼說
Kuma 怎麼說
如何最小成本實踐
TDD:邊寫邊重構,三點不動一點動
31
Q&A
以上內容節錄自:
加入我們: 32
33
https://martinfowler.com/bliki/UnitTest.html

More Related Content

What's hot

A/B testing AI - Global Artificial Intelligence Conference 2019
A/B testing AI - Global Artificial Intelligence Conference 2019A/B testing AI - Global Artificial Intelligence Conference 2019
A/B testing AI - Global Artificial Intelligence Conference 2019
Pavel Dmitriev
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
 
systems programming lab programs in c
systems programming lab programs in csystems programming lab programs in c
systems programming lab programs in c
Meghna Roy
 
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
 
クラウドを支えるこれからの暗号技術
クラウドを支えるこれからの暗号技術クラウドを支えるこれからの暗号技術
クラウドを支えるこれからの暗号技術
MITSUNARI Shigeo
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
Masaru Kurahayashi
 
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボAI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
Takashi Yoshinaga
 

What's hot (8)

A/B testing AI - Global Artificial Intelligence Conference 2019
A/B testing AI - Global Artificial Intelligence Conference 2019A/B testing AI - Global Artificial Intelligence Conference 2019
A/B testing AI - Global Artificial Intelligence Conference 2019
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
 
systems programming lab programs in c
systems programming lab programs in csystems programming lab programs in c
systems programming lab programs in c
 
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
 
クラウドを支えるこれからの暗号技術
クラウドを支えるこれからの暗号技術クラウドを支えるこれからの暗号技術
クラウドを支えるこれからの暗号技術
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボAI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
 

單元測試不是有寫就好