wheat-cache/doc/开发规范/单元测试.md

1.1 KiB

单元测试文档

样例

package dao

import (
	"testing"

	_ "gitee.com/wheat-os/wheatCache/conf"
	"gitee.com/wheat-os/wheatCache/pkg/lru"
	"gitee.com/wheat-os/wheatCache/pkg/proto"
	"github.com/stretchr/testify/require"
)

// 规范1. 每个 package 应该都至少有一个单测

// 规范2. 包里有公用的 mock 数据应该分离出来。
func mockData(t *testing.T, d *Dao) {

	values := []string{"1", "1.3", "abcdefg"}

	for _, val := range values {
		key := &proto.BaseKey{
			Key: val,
		}
		_, err := d.Set(key, val)

        // 规范3. 使用 require 包来完成单测
		require.NoError(t, err)
	}

}

// 规范4. 单元测试应该尽可能覆盖全部情况,不要使用依赖注入。
func TestDao_Reduce(t *testing.T) {
	lruCache := lru.NewLRUCache()
	dao := NewDao(lruCache)
	mockData(t, dao)

	resp, err := dao.Reduce(&proto.BaseKey{Key: "1"}, 2)
	require.NoError(t, err)
	require.Equal(t, resp, "-1")

	resp, err = dao.Reduce(&proto.BaseKey{Key: "1.3"}, 2)
	require.NoError(t, err)
	require.Equal(t, resp, "-0.70")

	_, err = dao.Reduce(&proto.BaseKey{Key: "abcdefg"}, 2)
	require.Error(t, err)
}