Tuesday, June 26, 2018

integration test with mysql

重構公司的 legacy code 時,發覺沒有 integration test ,一遇到資料庫相關的程式碼,心裡就覺得很棘手,不知該如何是好?

於是就動手做了一小段 integration test 的準備。
1. 首先是準備資料庫
2. 再來是準備初始資料
3. 將初始資料塞進資料庫

準備資料庫的部分,用 docker 好了。

準備初始資料的部分,想了一下,就用 mysql workbench 。
mysql workbench 要 export 資料,如果是用 csv 格式的話,可以 export 查詢的 result set 。但是如果要 export sql 格式的話,只能是 table 或是 database 。後來,我選擇先用 query  來做出一張新的 table ,再用 mysql workbench 來 export table

將初始資料塞進資料庫的部分,我本來是想說,我開發的程式語言是 nodejs ,我就用 nodejs 來做檔案的讀取,與資料庫的寫入吧? 結果,試了一些專門做資料庫 import 的 library 之後,卻出乎意料之外的…很難用。

重新考慮之後,如果考慮 dependency declaration 和 dependency isolation ,最好還是把測試用 nodejs 來做。不過,既然只是 integration test ,前兩者似乎也可以做一些妥協,那我還是用單純的老方法 mysql client 來做好了。

#!/bin/bash

docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6

# wait docker initialized
sleep 30

# import ce.item-report-hourly
mysql -h 127.0.0.1 -uroot -ppassword < ./ce_item_report_hourly.sql