Goでテスト
標準パッケージのtesting
を用いたテストの書き方についてみていきます。
テスト対象は先日作成した多層キャッシュプログラムです。
テスト対象↓
adapters/redis_adapter.go
package adapters
import "github.com/go-redis/redis"
type RedisAdapter struct {
client *redis.Client
}
func NewRedisAdapter() *RedisAdapter {
return &RedisAdapter{
client: redis.NewClient(&redis.Options{
Addr: "localhost:6381",
Password: "",
DB: 0,
}),
}
}
func (adapter *RedisAdapter) Get(key string) string {
val, err := adapter.client.Get(key).Result()
if err != nil {
return ""
}
return val
}
func (adapter * RedisAdapter) Set(key string, value string) {
adapter.client.Set(key, value, 0)
}
func (adapter * RedisAdapter) Delete(key string) {
adapter.client.Del(key)
}j
命名規則としてファイル名の末尾は_test.go
である必要があります。
touch adapters/redis_adapter_test.go
関数名の命名規則はTest
から始まる必要があります。
adapters/redis_adapter_test.go
package adapters
import (
"testing"
)
func TestRedisAdapter_Get(t *testing.T) {
adapter := NewRedisAdapter()
adapter.Set("key", "value")
want := "value"
got := adapter.Get("key")
if got != want {
t.Error("失敗")
}
}
testing
にassert
関数は無いため、期待と実際が異なった際に、
t.Error("失敗")
にしています。
テスト実行
go test ./adapters
ok in_memory_cache_demo/adapters 0.286s
shuyafukushima@Shuya:~/programing/in_memory_cache_demo
-v
オプションをつけることでより詳細な出力を得ることができます。
go test -v ./adapters
=== RUN TestRedisAdapter_Get
--- PASS: TestRedisAdapter_Get (0.02s)
PASS
ok in_memory_cache_demo/adapters 0.124s