はじめに
前回の記事でGo言語のキャップアップをしました。
今回はその続きとして単体テストコードを実装してみました。
実際のコードは下記にコミットしてます。
テスト仕様(検証内容)
以下が単体テストで実装した内容になります。
| カテゴリ | テスト項目 | 検証内容 | 期待される結果 |
|---|---|---|---|
| データ操作 | TestPageSave | Page 構造体の save メソッドがファイルを正しく書き込むか | 指定したパスにファイルが作成され、中身が一致すること |
| TestLoadPage | 既存のファイルから loadPage が正しくデータを読み出すか | 読み出した Page.Body が元のデータと一致すること | |
| ハンドラー | TestViewHandler | 存在するページへアクセスした際の挙動 | ステータスコード 200 (OK) が返ること |
| TestViewHandler_NotFound | 存在しないページへアクセスした際のリダイレクト | ステータスコード 302 (Found) で /edit/ へ遷移すること | |
| TestSaveHandler | フォームからのデータを受け取って保存し、リダイレクトするか | ファイルが保存され、/view/ へリダイレクトされること | |
| バリデーション | TestMakeHandler | regexp によるパス制限が機能しているか | 不正なパス(例: /view/!!)に対して 404 を返すこと |
テスト結果
コードはGitHubよりご確認ください。
下記にテスト実行時の結果を貼り付けてます。
無事テストが全て通ったことを確認しました。
C:\dev\ws\docker\goTutorial_testCode>docker exec -it gotutorial_testcode-app-1 go test -v
=== RUN TestPageSave
--- PASS: TestPageSave (0.01s)
=== RUN TestLoadPage
--- PASS: TestLoadPage (0.01s)
=== RUN TestViewHandler
--- PASS: TestViewHandler (0.01s)
=== RUN TestSaveHandler
--- PASS: TestSaveHandler (0.01s)
=== RUN TestPathValidation
--- PASS: TestPathValidation (0.00s)
PASS
ok github.com/13-5-7/goTutorial_testCode 0.049s
こちらはテストの網羅率です。
約65%網羅している事が確認できます。
C:\dev\ws\docker\goTutorial_testCode>docker exec -it gotutorial_testcode-app-1 go test -cover
PASS
coverage: 64.1% of statements
ok github.com/13-5-7/goTutorial_testCode 0.037s
実行時の注意点
main_test.go
// テスト用データの削除
os.RemoveAll(SavingFilePath)
テスト実行するとこの行でdataフォルダごと削除されてしまうので、残したい場合はコメントアウトしてください。
現在はテスト実行のたびに環境をクリーンにするためにあえて削除するようにしています。