iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
0
Software Development

0 -> Android -> Kotlin 開發筆記系列 第 18

[Day18] Android Test 學習筆記 II

  • 分享至 

  • xImage
  •  

假設今天我們要測試一個自己寫的書店購物車程式,
我們該如何寫測試?

首先,購物車程式碼可能是這樣:

開了一個書店

每個訂單的內容

每本書的物件資訊

根據3A原則:
Arrange: 確定測試目標範圍
Act: 呼叫
Assert: 驗證結果

我們乍看之下這個書店的程式正常執行沒什麼問題,但:

書本的價錢如果輸入錯誤的範圍,就會讓書店的總價跟著錯誤。


但如果這整個書店的內容,都要撰寫測試,
會稍嫌複雜,因此筆者想把功能先分開來看。

這個範例筆者沒有特別花心思設計,
一個書本設計上來說,當然不允許輸入錯誤的價錢,
但先排除設定價錢時就應該跳出錯誤通知的設計範疇來看,
假設我們將輸入負數的價錢統一預設為0元,
因此可以初步的確保這個書店至少不會賠錢。


書本setPrice的地方加了一個修正判斷

因此我們可以寫個測試程式,先確保書本的assign value沒有問題。

因此,原本錯誤的test code也因此可以過了,如此可以初步的確保書局的價錢不會出錯。

在這個範例裡面,
確定我們要測的就是書店的總價(Arrange),
撰寫測試程式呼叫訂單總價(Act),
以及確定我們預期的結果是否是程式執行的結果(assert),
就完成了一次最簡單的測試。

p.s. 這個範例有許多的問題,越想越不對勁…
如:建構子不該放判斷式,不該給錯誤的價錢投進系統正常執行...
但這些不是這個範例要表達的意思~請勿誤會~~ 

接著檢討這個方案有無符合FIRST:
Fast : 快速驗證 (有)
Independent : 受測試的程式獨立執行 (獨立)
Repeatable : 測試執行結果無誤差 (無誤差)
Self-Validating : 自我驗證 (嗯)
Timely : 測試碼要比production code 早完成 (不太正確)

因此這次的練習不符合TDD的FIRST原則。

最後,這份練習有無實踐 SOLID呢?
S : Single Responsibility Principle (單一職責原則)
O : Open Closed Principle (開放封閉原則)
L : Liskov Substitution Principle (里氏替換原則) or 
  Least Knowledge Principle (最小知識原則)
I : Interface Segregation Principle (介面隔離原則)
D : Dependency Inversion Principle (依賴反轉原則)
就交給讀者評論了。


測試是要融合到目前實作的程式上,才會慢慢熟悉,
這些名詞如有不懂的地方都可以上網Google學習,
寫測試程式或使用TDD開發,都不會是可以一步到位的,
每次的撰寫程式中刻意的練習,就會慢慢的進步,
測試的章節也就講到今天為止,
測試更深入的部分就讓讀者跟筆者一起自我學習吧!
今天的分享就到這裡,感謝各位。

本文同步發表在Medium,連結在此


上一篇
[Day17] Android Test 學習筆記 I
下一篇
[Day19] 與Android無關的軟體開發流程
系列文
0 -> Android -> Kotlin 開發筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言