ソフトウェアテストについて調べている
最近仕事でテストコードを書く機会があり、というよりテストコードを書くための土台を整備するのがメインだったのでひたすら調べて読んだものをメモしていくことにした。
前提
- Go/Echo
- クリーンアーキテクチャ
- DBアクセスを伴う部分のテストを書きたい
Pythonでテストを書いたことはあって、その時はひたすらassert.Equal()みたいなことをしていた記憶がある
しかし、Goには標準のテストパッケージtestingにassertはなさそう。
上の記事で触れられてるパッケージ入れてもいいけど、いったん標準パッケージだけでやっていく
APIサーバーとしてのテストならhttptest使って入力と出力与えて比較みたいなのが簡単そう
GolangでDBアクセスがあるユニットテストのやり方を考える #Go - Qiita
Goにおけるテスト用DB分離のテクニック
テスト用のDBはコンテナ立てるかモックするか、クリーンアップをどうするかは考えどころ。
テストデータに関しては、マイグレーションで用意するよりはテストコードでCRUD処理と一緒に書けばいいかと考えている
テスト環境を作成する!golangでクリーンな単体テスト環境をdocker testで作成する方法について – APPSWINGBY Developers Blog
E2E / Integration Testing in Golang with ory/dockertest | by Sidharthan Chandrasekaran Kamaraj | The Bug Shots | Medium
How To Run Go Integration Tests Using Docker | The GoDev Corner
一番簡単そうに思ったのがDBコンテナを立てる方法。ローカルで開発中はDBコンテナ立てているだろうから、それにつないで一通り操作をすればテストできるともいえる。
問題はこれをCIで自動化したいとき。CI上でもDBコンテナとアプリケーションを立ち上げることはできるだろうけど、立ち上げスクリプトを書く必要がありそうという点が引っ掛かりポイント
dockertestをつかえば、Goのコードでコンテナの立ち上げから片付けまで書けるらしい