如何测试延迟的 Go 语句?

如何测试doStuff功能?(游乐场:http : //play.golang.org/p/aPFSlaBLgX)


package myPackage


var locked = false


func doStuff() {

    defer unlock()

    lock()

    // some task that can cause errors

    // need to test if lock was really unlocked

    // this is just a simple example, things can go complex on real world

    panic("!")

}


func lock() {

    locked = true

}


func unlock() {

    locked = false

}

换句话说:如何测试使用defer语句的代码?应该使用哪些一般策略来测试延迟调用?如果没有通用的做法,如何测试这个具体的代码?


PS:去游乐场只允许 package main


吃鸡游戏
浏览 208回答 1
1回答

慕雪6442864

为了测试恐慌状态,应该推迟断言看起来要测试一个panic状态,我们应该defer测试断言:package myPackageimport "testing"func TestLock(t *testing.T) {    defer func (){        if locked == true {            t.Error("Expected locked to be false but got locked =", locked)        }    }() // do assertions on panicked state ↑    defer func (){ recover() }() // recover from panic ↑    doStuff() // this will panic and code execution will flow up ↑    // and, of course, execution will never reach below this line ---    // don't put assertions here}发生这种情况是doStuff()因为我们正在模拟 a panic,因此下面没有执行任何代码,因此应该推迟断言,以便它们处于“恐慌范围”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go