【发布时间】:2019-08-21 08:49:37
【问题描述】:
我正在尝试为 struct 构造函数编写单元测试,如果在 file.Open 期间发生错误,它也可能返回 nil。我不知道如何使用标志测试/模拟文件错误:os.O_RDWR|os.O_CREATE|os.O_APPEND
我尝试在 test 中检查 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
}
【问题讨论】:
-
有些东西不适合单元测试。如果您在需要对文件系统错误进行单元测试的环境中工作:询问您环境中的某人您的测试套件如何注入,例如磁盘已满错误。
-
发布的代码无法编译。见play.golang.org/p/BSumX2EKASJ。
标签: unit-testing go