gpt4 book ai didi

unit-testing - 如何使用 os.O_RDWR 和 os.O_CREATE 标志测试 file.Open?

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:05 25 4
gpt4 key购买 nike

我正在尝试为结构构造函数编写单元测试,如果在 file.Open 期间发生错误,它也可能返回 nil。我不知道如何使用标志测试/模拟文件错误:os.O_RDWR|os.O_CREATE|os.O_APPEND

我试图在测试中检查 nil 值,但失败了。

构造函数:

type App struct {
someField string
log *log.Logger
}

func New() *App {
app := &App{}
f, err := os.OpenFile("info.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("error opening file: %v", err)
return nil
}
mw := io.MultiWriter(os.Stdout, f)
l = log.New(mw, "APP", log.Ldate|log.LstdFlags|log.Lshortfile)
app.log = l

return app
}

并测试构造函数:

func TestNew(t *testing.T) {
var a App
a = New()

// doesn't cover
if a == nil {
t.Fatal("Error opening file")
}
}

我希望覆盖错误 != nil,它在覆盖范围内是红色的:

f, err := os.OpenFile("info.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("error opening file: %v", err)
return nil
}

最佳答案

在 Go 中模拟意味着拥有接口(interface),如果这是你真正需要的东西,你可以考虑使用像 https://github.com/spf13/afero 这样的东西。而不是直接使用 os 包。这还允许您使用内存文件系统和其他使测试更容易的东西。

关于unit-testing - 如何使用 os.O_RDWR 和 os.O_CREATE 标志测试 file.Open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57587823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com