iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1
自我挑戰組

這些年,我玩Pokémon Go學到的兩三事系列 第 9

[Day 9] 從道館功能解說UnitTest的重要性--by a Java Programmer

  • 分享至 

  • xImage
  •  

介紹完所有的道館功能後,回頭來複習一下在[Day 3]列出的道館功能項目:

  • 真實世界的地標(Landmark)
  • 記錄玩家到過的地方
  • 補給道具
  • 道館對戰(2017更新)
  • 團體戰(2017新增)
  • 給贊助商打廣告或活動(2020新增)

今天將就上面的功能來談談『單元測試(UnitTest)』

【測試三角形】

https://ithelp.ithome.com.tw/upload/images/20200830/20109107wZvThC7ySb.png

  • 在經過8天被我洗腦後,相信大家應該都知道道館對戰團體戰都涉及到
    玩家手機端Pokémon Go主機端的連動,因此歸在『端到端測試』。
  • 給贊助商打廣告需要贊助商提供廣告內容,在正式更新上線前,需要贊助商提
    供測試環境做整合,因此歸在『整合測試

剩下來的部分就是接下來要提的單元測試

【要做測試的部分】

https://ithelp.ithome.com.tw/upload/images/20200906/20109107n4T22AafaS.png

【PokémonGym 解說】

https://ithelp.ithome.com.tw/upload/images/20200830/201091073yeAGmwIGP.png
do4flip function 說明:

  1. 第一次翻轉會紀錄玩家來過此道館,因此可以開始進行道館鍊成,然後還會取得道具。
    do4flipelse區段執行此一行為。
  2. 之後的每一次只會提供道具,不需要再紀錄一次。在 do4flipif區段執行此一行為。

【AAA原則】

最糟糕的情境是什麼呢?(Arrangement)

當玩家明明第一次到達道館並翻轉牌子,結果沒有紀錄玩家來過,從此剝奪該玩家
鍊成該道館的機會。

行為:(Action)

玩家第一次來到道館時,isArrival=false 必須執行do4flip的else區段

研判結果:(Assertion)

do4flip的回傳值必須是更新玩家已到過此道館記錄給DB,再給玩家道具!否則
將與預期規格不符,測試失敗。

【PokemonGymTest解說】

https://ithelp.ithome.com.tw/upload/images/20200830/20109107jSE4FEcdPe.png
測試程式中,故意不給expected=更新玩家已到過此道館記錄給DB,再給玩家道具!結果:
https://ithelp.ithome.com.tw/upload/images/20200830/20109107SknNnuvWP4.png

【有做測試的好處】

想一想,如果今天PokemonGym被改版,在有提供PokemonGymTest的情況下,修改者不小心將
isArrival變成static變數又或者在規格不變前提下動到do4flip,連測試都跑不過就別談
git commit的動作了。反之,沒有提供的話,只能從git上去抓出『兇手就是commit的那位』。/images/emoticon/emoticon80.gif

看完這篇是不是覺得只要測完最壞的條件就行嗎?
https://ithelp.ithome.com.tw/upload/images/20200830/201091071dRee0UMsW.png
千萬不要被義勇先生羨慕。/images/emoticon/emoticon20.gif
什麼是最壞的情況?只有知道全部的狀況時才能選出最壞


上一篇
[Day 8] 道館對戰二三事--實況教學
下一篇
[Day 10] 補給站申請教學
系列文
這些年,我玩Pokémon Go學到的兩三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
暐翰
iT邦大師 1 級 ‧ 2020-09-09 00:09:03

太猛啦!
以為是遊戲日記,沒想到變成技術文章了!

哈哈, 因為只有學到兩三事, 所以遊戲功能面介紹要累積到一個程度才能產出一篇技術文章/images/emoticon/emoticon41.gif

我要留言

立即登入留言