解決したいこと
初歩的な質問ですみません。golangでユーザー定義した関数を引数に取る関数のテストを書いているのですが、main_test.goで書いた値が、関数の引数に代入されません。これはなぜそうなってしまうのでしょうか?
###main.go
go
1package main 2 3import "fmt" 4 5// debugツールで、a,bの値を見ると、a=0,b=0になっている 6// var a,b intを消すと、undeclared name: ~t怒られる 7func hoge(x int, f func(a, b, x int) int) int { 8 var a,b int 9 return f(a,b,x) 10} 11 12 13func fuga(a, b, x int) int { 14 return a*x + b 15} 16 17func main() { 18 ret := hoge(2, fuga) 19 fmt.Println(ret) 20} 21
###main_test.go
go
1package main 2 3import ( 4 "testing" 5) 6 7func TestLinearFunction(t *testing.T) { 8 tests := []struct { 9 a int 10 b int 11 x int 12 expected int 13 }{ 14 {1,1,1,2},{2,1,1,3},{1,2,1,3},{1,1,2,3}, 15 {2,2,1,4},{2,1,2,5},{1,2,2,4},{2,2,2,6}, 16 } 17 18 for _, test := range tests { 19 result := hoge(test.x,fuga) 20 if result != test.expected { 21 t.Errorf("input: a=%d b=%d x=%d, expected:%d, got:%d",test.a,test.b,test.x,test.expected,result) 22 } 23 } 24}
test結果
go
1--- FAIL: TestLinearFunction (0.00s) 2input: a=1 b=1 x=1, expected:2, got:0 3input: a=1 b=1 x=1, expected:3, got:0 4input: a=1 b=1 x=1, expected:3, got:0 5input: a=1 b=1 x=1, expected:3, got:0 6 7・・・以後も取得するのは「0」
実際にPASSしたコード
main.go
go
1package main 2 3import "fmt" 4 5func hoge(a, b, x int, f func(int, int, int) int) int { 6 return f(a, b, x) 7} 8 9func fuga(a, b, x int) int { 10 return a*x + b 11} 12// 一例 13func main() { 14 ret := hoge(1,2,3, fuga) 15 fmt.Println(ret) 16} 17
main_test.go
go
1package main 2 3import ( 4 "testing" 5) 6 7func TestLinearFunction(t *testing.T) { 8 tests := []struct { 9 a int 10 b int 11 x int 12 expected int 13 }{ 14 {1,1,1,2},{2,1,1,3},{1,2,1,3},{1,1,2,3}, 15 {2,2,1,4},{2,1,2,5},{1,2,2,4},{2,2,2,6}, 16 } 17 18 for _, test := range tests { 19 result := hoge(test.a,test.b,test.x,fuga) 20 if result != test.expected { 21 t.Errorf("input: a=%d b=%d x=%d, expected:%d, got:%d",test.a,test.b,test.x,test.expected,result) 22 } 23 } 24}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/17 14:00