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:Goプレイグラウンドでは、 package main
TL; DR
パニック状態をテストするには、アサーションを延期する必要があります
panic
状態をテストするにはdefer
、アサーションをテストする必要があります。
package myPackage
import "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()
、をシミュレートしているpanic
ため、以下でコードが実行されないために発生します。したがって、アサーションは据え置かれ、「パニックスコープ」になる可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加