forked from p93542168/wheat-cache
54 lines
1.1 KiB
Markdown
54 lines
1.1 KiB
Markdown
### 单元测试文档
|
|
|
|
#### 样例
|
|
```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)
|
|
}
|
|
|
|
|
|
``` |