이동

테스트에서 테스트에 대한 소개는 모든 소프트웨어에서 매우 중요하다. 코드의 정확성을 보장하고 변경 사항이 코드베이스의 다른 부분에서 다른 것을 파괴하지 않도록 할 수 있다는 것은 매우 중요합니다.

바둑 프로그램을 적절하게 테스트하기 위해 시간을 내서 자신이 개발 중인 것이 프로덕션에 출시될 때 계속 작동할 것이라는 확신을 가지고 더 빨리 개발할 수 있도록 합니다.

목표

이 튜토리얼이 끝나면 표준"testing"패키지를 사용하여 기본 기능 및 방법을 테스트 할 수 있습니다.

테이블 기반 테스트를 작성한 경험이 있으며 사용 가능한 다양한 플래그를 사용하여 테스트에서 더 자세한 출력을 생성하는 방법도 볼 수 있습니다.

비디오 자습서

이 자습서는 원하는 경우 비디오 형식으로 찾을 수 있습니다:

소개

이 자습서에서는go test명령을 사용하여 이동 코드에 대한 테스트를 개발하고 실행하는 방법을 살펴보겠습니다.

이동 테스트 파일

이전에 이동 프로젝트를 본 적이 있다면 프로젝트 내의 모든 파일이 아닌 경우 대부분 같은 디렉토리 내에FILE_test.go대응 파일이 있는 것을 알 수 있습니다.

이것은 사고가 아닙니다. 이들은 프로젝트에 대한 모든 단위 테스트를 포함하는 파일이며 해당 코드 내의 모든 코드를 테스트합니다.

프로젝트 구조 예
myproject/- calc.go- calc_test.go- main.go- main_test.go

간단한 테스트 파일

하나의 파일로 구성되고calculate()기능을 특징으로하는 매우 간단한 이동 프로그램이 있다고 상상해보십시오. 이calculate()함수는 단순히 1 번호를 취하고 2 를 더합니다. 좋은 우리를 얻을 간단한 및 실행:

메인.이 테스트를 테스트하려는 경우 동일한 디렉토리 내에main_test.go파일을 만들고 다음 테스트를 작성할 수 있습니다.

package mainimport ( "testing")func TestCalculate(t *testing.T) { if Calculate(2) != 4 { t.Error("Expected 2 + 2 to equal 4") }}

우리의 테스트를 실행

이제 우리는 우리의 첫 번째 이동 테스트를 만든 것을,이 실행하고 우리의 코드는 우리가 그것을 기대하는 방식으로 작동하는지 확인하는 시간이다. 우리는 실행하여 테스트를 실행할 수 있습니다:

$ go test

그러면 다음과 비슷한 결과가 출력됩니다.

PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

테이블 기반 테스트

이제 우리는 하나의 계산이 작동하는 것을 기쁘게 생각합니다,우리는 우리의 코드에 몇 가지 추가 테스트 케이스를 추가하여 자신감을 향상 볼 것이다. 항상 테스트되는 일련의 테스트 사례를 점진적으로 구축하려는 경우 다음과 같은array테스트의 평균을 구할 수 있습니다.

여기서 입력과 예상 값을 모두 포함하는 구조체를 선언합니다. 우리는for _, test := range tests호출을 사용하여 테스트 목록을 반복하고 입력에 관계없이 함수가 항상 예상 결과를 반환하는지 확인합니다.

이제 테스트 스위트를 실행할 때 이전과 동일한 출력을 볼 수 있습니다:

$이동 테스트
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

자세한 테스트 출력

때로는 어떤 테스트가 실행 중이고 얼마나 오래 걸렸는지 정확하게 확인할 수 있습니다. 고맙게도,이것은 다음과 같이 테스트를 실행할 때-v플래그를 사용하는 경우 사용할 수 있습니다.

$이동 테스트-

우리의 정상적인 테스트와 테이블 테스트가 모두 실행되고 통과되었으며0.00s보다 실행되지 않는 것을 볼 수 있습니다.

테스트 커버리지 확인

테스트 커버리지는 회사에서 때때로 학대받는 것을 본 메트릭입니다. 이 회사는”코드베이스가 테스트에서 75%이상 적용되어야 함”과 같은 모든 시스템에서 목표를 설정합니다.

그러나 이러한 종류의 목표는 행동 불량으로 이어질 수 있으며 개발 팀은 이러한 목표를 시도하고 공격하기 위해 시스템을”게임”합니다. 일부 팀의 사람들이 자바와 같은 언어로 기본 게터와 세터를 테스트하는 단위 테스트를 작성하는 것을 보았습니다.

테스트는 매우 중요하지만 작성한 테스트가 가장 큰 가치를 제공 할 수 있도록 시스템을 테스트하는 방법에 대해 실용적이어야합니다.

코드베이스의 중요하지 않은 부분을 다루기 위해 테스트를 작성하는 데 소요되는 시간은 시스템 내에서 캡처되는 중요한 비즈니스 로직에 대한 테스트 사례를 작성하는 데 더 많은 시간을 할애하고 더 많은 에지 사례를 보장 할 수 있습니다.

표지 플래그 사용

중요한 부분을 사용하여go test명령을 사용하여 시스템의 테스트 범위를 확인하는 방법을 살펴 보겠습니다.

main.gomain_test.go파일과 동일한 디렉토리 내에서 다음을 실행하십시오.:

$이동 테스트 커버
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.006s

총 이동 코드의66.7%가 테스트 케이스로 덮여 있음을 알 수 있습니다.

커버리지 시각화

66.7%값은 우리가 테스트 한 코드의 양을 알 수 있지만 테스트 한 코드 경로가 정확히 표시되지는 않습니다.

이것은go testgo tool cover이 특정 문제를 해결하는 데 도움이되는 곳입니다.

go test도구를 사용하여coverprofile을 생성할 수 있습니다.

PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.008s

이 생성 된coverage.out파일을 사용하여 생성 할 수 있습니다.:

$ go tool cover -html=coverage.out

이 페이지를 열 것 이다 선택의 브라우저에서 조금 보이는 것 같은 것:

보시다시피,Calculate함수 내의 대부분의 코드는 테스트 및 기능Green적용 범위입니다. main함수의 인쇄 문은Red로 테스트에서 다루지 않았습니다.

결론

이 튜토리얼이 유용하기를 바랍니다! 다음 추가 지원이 필요한 경우나 아래의 코멘트 섹션에 알려 주시기 바랍니다.