とりあえず雑多に書いていく

ハンドラのあるコードの中にデータベース関連処理を作成してそれをハンドラ層からの呼び出しで動作確認すると、エラーが出た時にどこがいけないか分かりにくいので効率が悪い

そのため、機能ごとに絞って確認作業がしたい このようなパッケージに実装された処理単独での挙動確認をユニットテストという

Goではxxx_test.goという名前にすると勝手にテストが書かれたファイルと認識される

例えば、SelectArticleDetail関数が正しく動いているかを確かめる手順

  1. 既にデータベースに入っている記事データを一つ選ぶ
  2. 1で選んだ記事をSelectArticleDetail関数でデータベースから取得する
  3. 2での取得結果が元々知っていた記事データの値と一致するか確認

大まかな流れのコードがあると展望がよくなると思うので載せとく

package repositories_test
 
import (
	"testing"
 
	"github.com/frinfo702/MyApi/repositories"
)
 
// SelectArticleDetal関数のテスト
func TestSelectArticleDetail(t *testing.T){
	expected := model.Artilce{
		// 定義略
	}
 
	got, err := repositories.selectArticleDetail(["適切な引数"])
	if err != nil {
		t.Fatal(err)
	}
 
	if got != expected {
		t.Errorf("got %s but want %s\n", got, expected)
	}
}
 

パッケージ名について 今回のファイルはrepositoriesパッケージ内にあるので2通りの選択肢がある

  • package repositories
  • package repositories_test 通常Goは所属ディレクトリの名前にするというルールがあるが、テストの時は_testをつけてもいいという例外がある

testingパッケージのインポート Goでは標準パッケージで用意されている

ある関数をユニットテストとして使用するには関数名・引数・戻り値を決まった形にする必要がある

  • 関数名: TestXxxx
  • 引数: *testing.T
  • 戻り値: なし

テストの中身

どのようなユニットテストでも似たようなものになる

  1. テスト結果に期待する値を定義
  2. テスト対象となる関数を定義
  3. 2と1を比べて一致か不一致なのかを検証