Re: [請益] 測試程式問題

看板Soft_Job作者 (飄飄渺渺所為誰)時間4年前 (2019/07/17 19:33), 編輯推噓2(206)
留言8則, 3人參與, 4年前最新討論串6/6 (看更多)
同樣是新手,有錯請指教. 理想當然是db的部分除了db測試以外,其它功能測試都mock掉。 但是常常很多功能(至少以我目前開發的系統來說),很多功能是depend on db output,也就是 db的結果是某功能的input。這時如果要mock db,變成要另外準備一份靜態的資料,而且每次sql scema改變,靜態資料也要一起更新 倒不如直接連結sql,從sql取得測試資料。像前篇使用sql lite事實上io速度不會比讀檔慢才對 這時如果要mock db的話,變成要 ※ 引述《ripple0129 (perry tsai)》之銘言: : 單元測試是測試程式碼 : 含資料一同測試不太對 : 簡單來說 : 萬一程式碼有錯 : 資料又不小心混在一起變對的 即使連db也應該自己準備測試資料,不太可能會混了就變對的,除非你用product db,測試資料無法預期。 話說回來,無法預期的資料測試應該也很不穩吧。 : 這個會死的很莫名奇妙 : 不過理想歸理想啦 : 按於現實時程 : 我也常常做整合測試 : 資料程式碼一起大混測 : 爆了就當做倒霉 : 時間給多少做多少事了 : ※ 引述《Nonegrame (肥宅)》之銘言: : : ※ 引述《VFCanisLupus (CanisLupus)》之銘言: : : : 懂你的意思,假如說redis mongodb 那些並沒有單元測試的模組或套件(我還沒花時 : 間 : : : 假設),那可以用docker的方式進行。 : : : 那這樣是不是違反了單元測試的F.I.R.S.T 要點的 F與I ?? : : : 微服務用的是Spring Cloud,照上面前輩這樣子做的話我做單元測試要用docker 架r : ed : : : abbitmq MySQL mongodb (可能服務發現也要啟動起來), 這樣每次測試應該是沒辦 : 法 : : : 內執行完了。 : : : 期間只要有任何一部分沒成功啟動或者連線失敗都回造成測試失敗。 : : : 後寫測試T要點應該早就違反了,先不討論 : : : -- : : 我測試新手啦 寫單元測試時 我通常不會 mock DB : : 在使用 ORM 的狀況下 很容易會執行後與預期不符的狀況 : : (例如 有綁 AfterFind Hook, 驗 SQL 會是對的 但撈完的結果已經被改過 ) 為什麼要綁hook,hook的問題應該在開發前就想到的。 所以tdd drive是不適合「導入」已經寫完的product,應該在開發初期就規劃。 : : 遇到其他外部功能還是會 mock 掉 但 DB 部分不會 : : 確保真的連到 DB 時 ORM 出來結果與 test 狀況相同 : : 當然這樣算是單元+整合測試的混合了 : : 如果用的框架有提供相關功能會超級方便 : : 像 php laravel 用 sqlite memory driver 實際跑起來也沒多慢 sqlite對我來說算unit test, 因為資料要自己準備,感覺是靜態input. : : 至於只驗證 SQL 語法是否為預期也試過 但是寫起來太累了 這是什麼意思啊﹖ : : 最後還是直接開 DB 連比較乾脆 : : 以上 提供參考 ----- Sent from JPTT on my Google Pixel 3a XL. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.174.189 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1563363219.A.D7D.html

07/17 22:28, 4年前 , 1F
只驗 SQL 是指用 ORM 下 $order->all() 這樣
07/17 22:28, 1F

07/17 22:29, 4年前 , 2F
驗證就寫 select * from order, ORM SQL 一樣就當成功
07/17 22:29, 2F

07/17 22:31, 4年前 , 3F
我是覺得寫起來很累
07/17 22:31, 3F

07/18 09:43, 4年前 , 4F
我本身是使用框架,測試開啟時啟動H2 db(memory mode,差
07/18 09:43, 4F

07/18 09:43, 4年前 , 5F
不多可以接受各家Sql語法,但trigger必須用Java寫)並建構
07/18 09:43, 5F

07/18 09:43, 4年前 , 6F
必要的Schema與資料,結束時就關閉H2,如果不是用框架,那
07/18 09:43, 6F

07/18 09:43, 4年前 , 7F
麼就必須想辦法在測試前自動啟動然後測試完自動關閉
07/18 09:43, 7F

07/18 11:57, 4年前 , 8F
為什麼要驗證orm?
07/18 11:57, 8F
文章代碼(AID): #1TBmUJrz (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1TBmUJrz (Soft_Job)