Go에서 테스트를 작성하는 방법은 무엇인가요?
_____A1: 테스트 파일은 테스트 대상 파일과 같은 디렉토리에 `_test.go`라는 접미사를 붙여서 만듭니다. 예를 들어, `math.go` 파일을 테스트하려면 `math_test.go` 파일을 생성합니다.
Q2: 테스트 함수는 어떻게 작성하나요?
A2: 테스트 함수는 `Test`로 시작하는 이름을 가지고, 함수 시그니처는 `func TestXxx(t *testing.T)` 형태여야 합니다. 예:
```go
func TestAdd(t *testing.T) {
// 테스트 코드
}
```
Q3: 테스트 함수 내에서 실패 조건을 어떻게 표시하나요?
A3: `t.Error`, `t.Errorf`, `t.Fail`, `t.FailNow`, `t.Fatal`, `t.Fatalf` 등 `testing.T` 메서드를 사용하여 실패 조건을 기록하고 테스트를 실패하게 할 수 있습니다.
Q4: 여러 하위 테스트(subtest)를 작성하려면 어떻게 해야 하나요?
A4: `t.Run` 메서드를 사용하여 하위 테스트를 작성할 수 있습니다. 예:
```go
t.Run("SubtestName", func(t *testing.T) {
// 하위 테스트 코드
})
```
Q5: 벤치마크 테스트는 어떻게 작성하나요?
A5: 벤치마크 함수는 `Benchmark`로 시작하고 `func BenchmarkXxx(b *testing.B)` 시그니처를 가집니다. 반복할 코드를 `b.N`만큼 반복하며 측정합니다. 예:
```go
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(1, 2)
}
}
```
Q6: 테스트 실행은 어떻게 하나요?
A6: 터미널에서 해당 패키지 디렉토리로 이동 후 `go test` 명령을 실행합니다.
특정 테스트 함수만 실행하려면:
```bash
go test -run TestFunctionName
Q7: 테스트 커버리지 보고서는 어떻게 생성하나요?
A7:
```bash
go test -cover
```
또는 커버리지 프로파일을 파일로 저장:
```bash
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
```
Q8: 테스트에서 외부 리소스를 설정하거나 해제하고 싶을 때는?
A8: `TestMain(m *testing.M)` 함수를 정의하고, 테스트 실행 전후 리소스 초기화와 해제를 처리할 수 있습니다.
예:
```go
func TestMain(m *testing.M) {
// 초기화
code := m.Run()
// 종료 작업
os.Exit(code)
}
```
Q9: Go 테스트 패키지에서 테스트를 병행 처리하려면?
A9: `t.Parallel()` 메서드를 테스트 함수 내에서 호출하면, 해당 테스트를 병렬로 실행할 수 있습니다.
예:
```go
func TestParallel(t *testing.T) {
t.Parallel()
// 테스트 내용
}
```
Q10: 외부 또는 서드파티 테스트 프레임워크 없이 Go 표준 방식으로 테스트를 작성하는 이유는?
A10: Go는 자체 내장된 `testing` 패키지로 가볍고 효율적인 테스트 방법을 제공하여 별도의 종속성 없이 쉽게 테스트 코드를 만들 수 있습니다.
Go는 내장된 테스트 패키지를 제공하여 개발자가 쉽게 단위 테스트를 작성하고 실행할 수 있도록 돕습니다.
아래에서는 Go에서 테스트를 작성하는 방법에 대해 자세히 설명하겠습니다.
1. 테스트 파일 생성 Go에서 테스트는 일반적으로 `_test.go`로 끝나는 파일에 작성됩니다.
예를 들어, `math.go`라는 파일이 있다면, 해당 파일의 테스트는 `math_test.go`라는 파일에 작성할 수 있습니다.
2. 테스트 패키지 임포트 테스트 파일의 상단에는 `testing` 패키지를 임포트해야 합니다.
이 패키지는 Go의 테스트 기능을 제공하는 핵심 패키지입니다.
```go package math_test import ( "testing" ) ```
3. 테스트 함수 작성 테스트 함수는 반드시 `Test`로 시작해야 하며, 매개변수로 `*testing.T`를 받아야 합니다.
이 함수 내에서 테스트할 코드를 실행하고, 결과를 검증합니다.
```go func TestAdd(t *testing.T) { result := Add(1,
2) expected := 3 if result != expected { t.Errorf("Add(1,
2) = %d; want %d", result, expected) } } ``` 위의 예제에서 `Add` 함수는 두 숫자를 더하는 함수라고 가정합니다.
`result`가 `expected`와 다를 경우, `t.Errorf`를 호출하여 오류 메시지를 출력합니다.
4. 테스트 실행 테스트를 실행하려면 터미널에서 다음 명령어를 입력합니다: ```bash go test ``` 이 명령어는 현재 디렉토리의 모든 `_test.go` 파일을 찾아 테스트를 실행합니다.
테스트 결과는 성공 여부와 함께 출력됩니다.
5. 벤치마크 테스트 Go에서는 벤치마크 테스트도 지원합니다.
벤치마크 테스트는 성능을 측정하는 데 사용됩니다.
벤치마크 함수는 `Benchmark`로 시작해야 하며, 매개변수로 `*testing.B`를 받아야 합니다.
```go func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add(1,
2) } } ``` 위의 예제에서 `BenchmarkAdd` 함수는 `Add` 함수를 여러 번 호출하여 성능을 측정합니다.
`b.N`은 Go가 자동으로 조정하는 반복 횟수입니다.
6. 테스트 커버리지 Go는 테스트 커버리지를 측정하는 기능도 제공합니다.
커버리지를 확인하려면 다음 명령어를 사용합니다: ```bash go test -cover ``` 이 명령어는 테스트가 얼마나 많은 코드 라인을 커버했는지를 보여줍니다.
7. 예제 테스트 아래는 간단한 예제입니다.
`math.go` 파일에 `Add` 함수를 정의하고, `math_test.go` 파일에 해당 함수를 테스트하는 코드를 작성합니다.
math.go ```go package math func Add(a, b int) int { return a + b } ``` math_test.go ```go package math_test import ( "math" "testing" ) func TestAdd(t *testing.T) { result := math.Add(1,
2) expected := 3 if result != expected { t.Errorf("Add(1,
2) = %d; want %d", result, expected) } } ```
8. Go에서 테스트를 작성하는 것은 매우 간단하며, 내장된 `testing` 패키지를 통해 쉽게 구현할 수 있습니다.
단위 테스트, 벤치마크 테스트, 커버리지 측정 등 다양한 기능을 활용하여 코드의 품질을 높일 수 있습니다.
테스트를 통해 코드의 안정성을 확보하고, 리팩토링 시에도 기존 기능이 정상적으로 작동하는지 확인할 수 있습니다.
작성자:
김유나 [비회원]
| 작성일자: 1년 전
2024-09-19 01:50:27
조회수: 145 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 145 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.