도전 과제:
Go 1.18에는 제네릭이 도입되었지만 어떻게 효과적으로 일반 테이블 테스트를 수행할 수 있습니까? T에 대해 인스턴스화가 불가능할 때의 함수 값?
문제 설명:
현재 테스트 방법에서는 T 값을 인스턴스화할 수 없기 때문에 각 함수에 대한 테스트 논리를 다시 선언해야 합니다.
접근 방식:
테스트 접근 방식은 공통 재사용에 중점을 두어야 합니다. 일반 함수의 구체적인 특성을 고려하면서 논리를 고려합니다.
해결책:
1. 재사용 가능한 테스트 논리:
테스트 설정 및 결과 확인과 같은 일반적인 작업을 캡슐화하는 runTestCase[T Item](tc testCase[T])와 같은 일반 테스트 함수를 만듭니다.
2. 인스턴스화 고려 사항:
일반 함수는 결국 특정 유형으로 인스턴스화되어야 합니다. 그러나 가능한 모든 유형 매개변수를 테스트할 필요는 없습니다.
3. 유형별 동작에 집중:
연산자 의미에 따라 동작이 다른 경우에만 특정 유형에 대한 함수 테스트에 집중하세요. 예를 들어 숫자와 문자열에 대한 연산자 또는 숫자와 문자열에 대한 비교 연산자입니다.
예:
이 테스트 코드는 일반 runTestCase 함수를 사용하여 다양한 유형을 테스트합니다. 매장 지도의 값:
func TestStore(t *testing.T) { t.Run("ints", testInt) t.Run("strings", testString) } func testString(t *testing.T) { t.Parallel() tests := []testCase[string]{ { start: store[string]{}, key: 123, val: "test", expected: store[string]{123: "test"}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } } func testInt(t *testing.T) { t.Parallel() tests := []testCase[int]{ { start: store[int]{}, key: 123, val: 456, expected: store[int]{123: 456}, }, // ... } for _, tc := range tests { t.Run(tc.name, runTestCase(tc)) } }
위 내용은 유형 매개변수를 인스턴스화하지 않고 Go에서 일반 함수를 효과적으로 테이블 테스트할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!