테스트 작성 시작

완료됨

프로그램 작성에 들어가기 전에 테스트에 대해 설명하고 첫 번째 테스트를 만들어 보겠습니다. 패키지 테스트는 Go 패키지의 자동화된 테스트를 지원합니다. 테스트는 코드가 예상대로 작동하는지 확인하는 데 중요합니다. 일반적으로 기능을 확인하려면 패키지의 각 함수마다 테스트가 하나 이상 있어야 합니다.

코딩 시 TDD(테스트 기반 개발) 접근 방식을 사용하는 것이 좋습니다. 이 접근 방식을 사용하여 테스트를 먼저 작성하겠습니다. 테스트할 코드가 아직 존재하지 않기 때문에 이 테스트가 실패하는 것을 확인할 수 있습니다. 그런 다음 테스트를 충족하는 코드를 작성합니다.

테스트 파일 만들기

먼저 bankcore 패키지에 대한 모든 테스트를 보관할 Go 파일을 만들어야 합니다. 테스트 파일을 만들 때 파일의 이름이 _test.go로 끝나야 합니다. 원하는 것은 무엇이든 앞에 넣을 수 있지만 패턴은 테스트할 파일의 이름을 사용하는 것입니다.

또한 작성하려는 모든 테스트는 Test로 시작하는 함수여야 합니다. 그런 다음 일반적으로 TestDeposit과 같이 작성 중인 테스트에 대한 설명이 포함된 이름을 작성합니다.

$GOPATH/src/bankcore/ 위치로 이동하고 다음 내용을 사용하여 bank_test.go라는 파일을 만듭니다.

package bank

import "testing"

func TestAccount(t *testing.T) {

}

터미널을 열고 $GOPATH/src/bankcore/ 위치에 있는지 확인합니다. 그리고 다음 명령을 사용하여 자세한 정보 표시 모드에서 테스트를 실행합니다.

go test -v

Go는 테스트를 실행할 모든 *_test.go 파일을 검색하므로 다음과 같은 출력이 표시됩니다.

=== RUN   TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok      github.com/msft/bank    0.391s

실패하는 테스트 작성

코드를 작성하기 전에 먼저 TDD를 사용하여 실패하는 테스트를 작성해 보겠습니다. TestAccount 함수를 다음 코드로 수정합니다.

package bank

import "testing"

func TestAccount(t *testing.T) {
    account := Account{
        Customer: Customer{
            Name:    "John",
            Address: "Los Angeles, California",
            Phone:   "(213) 555 0147",
        },
        Number:  1001,
        Balance: 0,
    }

    if account.Name == "" {
        t.Error("can't create an Account object")
    }
}

아직 구현하지 않은 계좌 및 고객의 구조체를 도입했습니다. 또한 정상적으로 작동하지 않는 것이 있는 경우 테스트가 실패한다고 명시하기 위해 t.Error() 함수를 사용하고 있습니다.

테스트에는 (아직 존재하지 않는) 계좌 개체를 만들기 위한 논리가 포함되어 있다는 점에도 유의하세요. 하지만 지금은 패키지와 상호 작용하는 방법을 설계하고 있습니다.

참고

한 줄씩 설명할 시간이 없으므로 테스트를 위한 코드를 제공하겠습니다. 하지만 조금씩 차근차근 시작하고 필요한 만큼 반복한다는 생각을 갖고 있어야 합니다.

이 경우에는 테스트를 작성하고 실패하는 것을 확인한 다음 테스트를 충족하는 코드를 작성하는 한 번의 반복만 수행하겠습니다. 직접 코딩할 때는 간단하게 시작해 진행하면서 복잡성을 추가해야 합니다.

go test -v 명령을 실행하면 실패하는 테스트가 출력에 표시되어야 합니다.

# github.com/msft/bank [github.com/msft/bank.test]
.\bank_test.go:6:13: undefined: Account
.\bank_test.go:7:13: undefined: Customer
FAIL    github.com/msft/bank [build failed]

지금은 그대로 두겠습니다. 이 테스트를 완료하고 온라인 은행 시스템 논리를 작성할 때 새로운 테스트를 만듭니다.