Go에서 리플렉션을 사용하여 함수 모음 테스트
문제
세트 단위 테스트 비슷한 시그니처와 반환 값을 가진 함수는 반복적이고 번거로울 수 있습니다. 기존 접근 방식에는 각 기능에 대한 개별 테스트를 작성하는 작업이 포함되어 있어 코드 중복이 발생할 수 있습니다. Reflection은 이 프로세스를 간소화하는 솔루션을 제공합니다.
Reflection을 사용한 솔루션
테스트에서 리플렉션을 활용하려면:
예제 코드
<code class="go">var funcNames = []string{"Func1", "Func2", "Func3"} func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { fmt.Println(fname) sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() if val < 1 { t.Error(fname + " should return positive value") } if !ret[1].IsNil() { t.Error(fname + " shouldn't err") } } }</code>
참고: 함수 이름이 지정되면 테스트가 패닉됩니다. 이를 완화하려면:
<code class="go">for _, fname := range funcNames { defer func() { if x := recover(); x != nil { t.Error("TestFunc paniced for", fname, ": ", x) } }() fmt.Println(fname) }</code>
위 내용은 Go에서 유사한 시그니처를 가진 함수에 대한 Reflection의 단위 테스트를 어떻게 간소화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!