Search

가장 빠르게 Go Test Code를 작성하는 방법

주제
Backend
날짜
2023/07/18

테스트를 하기 전에 알아야할 것들

1.
테스트 코드의 func의 이름의 가장 앞에는 항상 Test라고 prefix가 있어야 Go가 인식합니다. 또한 파일 이름이 _test로 끝나야합니다.
// member_service_test.go // OK // MemberServiceTest.go // Error // test_member_service.go // Error func Test_memberService(t *testing.T) {}. // OK func TestMemeberService(t *testing.T) {}. // OK func MemeberServiceTest(t *testing.T) {} // ERROR func MemeberService_Test(t *testing.T) {} // ERROR
Go
복사
2.
단위 테스트는 테스트할 func과 같은 패키지에 있어야하고, 통합 테스트는 Project Root에 두는걸 권장합니다. (import cycle 방지)
a.
단위 테스트
b.
통합 테스트
3.
테스트 실행 방법 (테스트 코드 옵션)
a.
전체 테스트 코드 실행 : go test -v {path}
b.
특정 테스트 함수 실행 : go test -v {path} -run "{{regex}}"

단위 테스트

가장 빠르게 단위 테스트 하는 법

해당 방법은 꼭 JetBrain사의 IDEA를 사용해야합니다.
바쁘신 분들을 위해 가장 손쉽게 단위 테스트하는 방법입니다.
테스트하고 싶은 func 이름을 우클릭합니다.
Go To -> Test를 클릭해주세요.
Test할 범위를 고를 수 있습니다. 저희는 단위 테스트를 할 것이기에 Test for function을 선택하겠습니다.
짜잔! 테스트 코드 완성!
이제 테스트 케이스만 작성해주시면 됩니다!
트랜잭션 관리도…
몽고 트랜잭션 관리는 아래 예시 코드에서 확인할 수 있습니다.
테스트 결과
무사히 PASS를 한 것을 확인하실 수 있습니다.
예시 코드

단위 테스트 하는 법

테스트하기전에 가장 먼저 DI, DB 연결 등의 기본 세팅을 해줍니다.
(저처럼 하나의 func에 다 넣지 말고 모듈화를 하면 좋겠네요..)
그 후에 테스트 케이스를 작성해줍니다.
wantErrtrue로 할 경우 실행 결과가 error일 때 PASS 합니다.
반대로 wantErrfalse로 할 경우 정상적으로 실행이 완료되면 PASS 합니다.
마지막으로 위에서 작성한 테스트 케이스들을 for문을 돌면서 테스트 하고 싶은 함수에 넣어줍니다.

통합 테스트

통합 테스트 같은 경우엔 가장 먼저 FiberApp을 생성해야합니다. (Listen은 필요없습니다)
저 같은 경우엔 app.go에 모든 설정 및 DI가 되어 있어서 NewFiberApp을 통해 FiberApp을 가져왔습니다.
FiberApp을 생성한 후 테스트 케이스를 작성합니다.
저는 RequestInfo라는 struct를 만들어서 작성했습니다.
테스트 케이스를 다 작성 했으면, 이제 httptest.NewRequest를 통해 Http Request를 만들어서 app.Test(req)를 통해 통합 테스트를 할 수 있습니다.
예시 코드