0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go言語テストファースト例

Last updated at Posted at 2023-01-17

やりたいこと
外部APIやDBへのアクセス処理が含まれるメソッドをモックしてテストできるような作りにします。

以下★のメソッドをテストします。

実装側
外部アクセス処理のあるGetメソッドを外から差し込んで利用します。

// main.go 1つ目のファイル
package main

import (
	"fmt"
	"net/http"
)

type A struct {
	Name string
}
type AIf interface {
	Get() string
}

func main() {
	a := A{"本物"}
	s := Example(&a)
	fmt.Println(s)
}

// ★テスト対象メソッド
func Example(a AIf) string {
	s := a.Get()
	return s
}

func (a *A) Get() string {
	_, _ = http.Get("yahoo.co.jp")
	return a.Name + "のGetメソッド"
}

main実行結果
本物のGetメソッド

実装側
外部アクセス処理のないテスト用Getメソッドを外から差し込み利用することでExampleメソッドの処理を最後まで通せるようにします。

// main_test.go 2つ目のファイル
package main

import (
	"github.com/stretchr/testify/assert"
	"testing"
)

type AMock struct {
	Name string
}

func Test(t *testing.T) {
	t.Run("success test", func(t *testing.T) {
		a := AMock{"テスト用"}
		s := Example(&a)
		assert.Equal(t, "テスト用のGetメソッド", s)
		t.Log(s)
	})
}

func (a *AMock) Get() string {
	return a.Name + "のGetメソッド"
}

Test実行結果
テスト用のGetメソッド

ポイントとなる点
Exampleメソッドにインターフェース型で構造体のアドレスを渡します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?