3 回答
TA贡献1898条经验 获得超8个赞
测试依赖于文件系统的功能的最简单方法是在每个测试周围添加一些设置和拆卸,在运行测试之前将必要的文件放在适当的位置,然后在运行测试后删除它们。
func TestZipper(t *testing.T) {
// Create temporary files
defer func() {
// Clean up temporary files
}()
t.Run("group", func(t *testing.T) { // This is necessary so the above defer function doesn't run too soon
// your actual tests
})
}
TA贡献1858条经验 获得超8个赞
我知道“不访问文件系统”是很多人对“单元测试”定义的一部分。如果你的职业不是寻找和捍卫定义:忘掉那个限制吧。文件系统访问快速且良好,go 工具甚至对名为“testdata”的文件夹进行特殊处理:此类文件夹应该包含测试期间要使用的测试数据。
Go(和他们的用户)在区分“单元”和“集成”测试时并不是很迂腐。看看如何测试这些东西的标准库。编写相关测试比在 fs 访问上变得幼稚更重要。(请注意,文件系统和数据库在技术上是外部系统,但在现实生活中,没有文件系统就无法编译 Go 代码,因此将测试与这个“外部系统”隔离是荒谬的。)
TA贡献1805条经验 获得超10个赞
那么,您可能会寻找一种以安全方式操作文件系统的方法,或者在其他地方寻找解决方案。这个功能的职责是什么?它应该准备一个 zip 文件还是将其写入文件系统?
我建议你应该从这个函数中取出文件创建并将函数更改为:
func Zipper(src string, dst io.Writer, target string) error { ziper := zip.NewWriter(dst) defer ziper.Close()
这样,出于测试目的,您可以提供一个简单的缓冲区,而在生产中使用您心爱的文件系统!
- 3 回答
- 0 关注
- 134 浏览
添加回答
举报