### 单元测试文档 #### 样例 ```go package dao import ( "testing" _ "gitee.com/timedb/wheatCache/conf" "gitee.com/timedb/wheatCache/pkg/lru" "gitee.com/timedb/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) } ```