【发布时间】:2018-08-30 08:10:44
【问题描述】:
我有以下按预期工作的功能。现在我想为它创建单元测试。问题是我正在使用文件系统,我无法弄清楚如何使用一些模拟或任何其他解决方案来做到这一点。知道如何在 Go 中简单地做到这一点吗? 我真的应该创建一个文件然后用单元测试检查吗?恐怕在某些系统中它会起作用,而在某些系统中它会中断(winodos/mac/linux)
这是工作函数:
func Zipper(src string,artifact string,target string) error {
zf, err := os.Create(artifact)
if err != nil {
return err
}
defer zf.Close()
ziper := zip.NewWriter(zf)
defer ziper.Close()
fileInfo, err := os.Stat(src)
if err != nil {
return err
}
var bs string
if fileInfo.IsDir(); len(target) > 0 {
bs = target
} else {
bs = filepath.Base(src)
}
if bs != "" {
bs += "/"
}
filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
if bs != "" {
header.Name = filepath.Join(strings.TrimPrefix(path, bs))
}
header.Method = zip.Deflate
writer, err := ziper.CreateHeader(header)
if err != nil {
return err
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
return err
})
return err
}
我阅读了以下内容,但对我的情况没有多大帮助 How to mock/abstract filesystem in go?
【问题讨论】:
-
您要测试函数的哪一部分?如果您想测试 zip 部分,您可以创建一个分隔函数,该函数采用
io.Reader。这么长的函数不容易进行单元测试。 -
@apxp - 我想测试所有:) 当然,你建议划分功能,如何?你能举个例子吗?
标签: unit-testing go filesystems zip archive