In Go 테스트에서는 함수 캐스트와 리플렉션을 사용하여 보다 유연하고 유지 관리가 가능한 테스트 케이스를 만들 수 있습니다. 함수 캐스트를 사용하면 한 유형의 함수를 다른 유형으로 변환할 수 있는 반면, 리플렉션을 사용하면 유형과 값을 검사하고 조작할 수 있습니다. 실제 사례에서는 모의 함수를 작성하고, 함수 유형을 확인하고, 테스트 사례를 동적으로 생성하고, 일반 테스트 함수를 작성하는 데 사용할 수 있습니다.
In Go 테스트, 함수 유형 변환 및 반영은 보다 유연하고 유지 관리 가능한 테스트 사례를 만들 수 있는 두 가지 강력한 도구입니다.
함수 유형 변환을 사용하면 한 유형의 함수를 다른 유형으로 변환할 수 있습니다. 예를 들어 int 매개변수를 사용하고 문자열을 반환하는 함수를 float64 매개변수를 사용하고 bool을 반환하는 함수로 변환할 수 있습니다.
func IntToString(i int) string { return strconv.Itoa(i) } func main() { var f func(float64) bool // 类型转换 f = func(f float64) bool { return f > 0.5 } fmt.Println(f(0.75)) // 输出: true }
Reflection을 사용하면 유형과 값을 검사하고 조작할 수 있습니다. 리플렉션을 사용하여 함수 이름, 매개변수 유형, 반환 값 유형을 가져오고 함수를 동적으로 호출할 수도 있습니다.
func CallFunction(f interface{}, args ...interface{}) (interface{}, error) { fv := reflect.ValueOf(f) t := fv.Type() if t.Kind() != reflect.Func { return nil, errors.New("f is not a function") } // 检查fn的参数类型和返回类型 in := make([]reflect.Value, 0, len(args)) for _, v := range args { in = append(in, reflect.ValueOf(v)) } // 动态调用函数 out := fv.Call(in) // 检查输出的类型 outType := t.Out(0) outValue := out[0] if outType.Kind() == reflect.Interface { return outValue.Interface(), nil } else { return outValue.Convert(outType).Interface(), nil } } func main() { f := func(a int, b float64) string { return fmt.Sprintf("%d + %.2f = %.2f", a, b, float64(a)+b) } result, err := CallFunction(f, 1, 2.5) if err != nil { panic(err) } fmt.Println(result) // 输出: "1 + 2.50 = 3.50" }
테스트에서 함수 유형 변환 및 반영은 다음 시나리오에서 사용할 수 있습니다.
위 내용은 테스트에서 golang 함수 유형 변환 및 반영 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!