Golang: 依赖于io.File.Write()的单元测试功能

114 阅读1分钟
  • 根据那里的建议,从stackoverflow转贴。

你好,Gophers的朋友们!我正在学习如何编写单元测试,但被卡住了。

我在学习如何写单元测试,但被卡住了。请不要打我,因为我是新手。我在网上搜了很多资料,但还是想不出一个合适的解决方案。
这个练习是为我写的一个函数写一个单元测试。

Filecopy(pathfrom, pathto string, limit, offset int64) 错误

简化后的函数看起来像这样

source, err := os.Open(pathfrom)
	destination, err := os.Create(pathto)
	buf := make([]byte, *buffersize)
	for {
		n, err := source.Read(buf)
		if err != nil && err != io.EOF {
			return err
		}
		if _, err := destination.Write(buf[pos:n]); err != nil {
			return err
			if n == 0 {
				break
			}
		}
	}

现在我必须对它进行单元测试。而且进展并不顺利。我有两种方法可以测试它。

  1. 为它提供一个真正的临时文件,并预设其内容,这样测试函数就知道执行后会有什么结果。应该可以,但我读到这个选项不是正确的单元测试方法,因为它涉及到FS。
  2. 使用假的FS。我试着测试了mapfs和afero生成的文件,但运气不好,我的函数对它不起作用(但对真实文件起作用),要么我做错了。

请告诉我如何正确地单元测试我的功能。任何帮助都会被感激。