"go test"는 Go 언어로 작성된 프로그램을 테스트하는 데 사용되는 테스트 명령입니다. 이 테스트는 코드 패키지를 기반으로 합니다. "go test" 명령은 여러 테스트 함수가 포함된 소스 코드 디렉터리 아래에 있는 "*_test.go"라는 소스 코드 파일을 자동으로 읽습니다. 테스트 함수에는 일반적으로 "Test"라는 이름 접두어와 "testing.go"라는 유형이 있습니다. T" " 함수가 매개변수로 선언되었습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
Go 언어에는 단위 테스트 및 성능 테스트 시스템 세트가 있어 적은 양의 코드만 추가하여 필요한 코드를 빠르게 테스트할 수 있습니다.
go test 명령은 소스 코드 디렉터리 아래에 *_test.go라는 파일을 자동으로 읽어 테스트용 실행 파일을 생성하고 실행합니다.
go 테스트 명령어(test 명령어)
go test
명령어는 Go 언어로 작성된 프로그램을 테스트하는 데 사용됩니다. 이러한 종류의 테스트는 코드 패키지를 기반으로 합니다. 물론 이를 위해서는 테스트 소스 코드 파일의 도움도 필요합니다. 이 장의 두 번째 섹션에서는 Go 프로그램 테스트 코드를 작성하고 작성하는 방법에 대해 자세히 설명합니다. 여기서는 명령을 사용하여 테스트를 시작하는 방법만 설명합니다. go test
命令用于对Go语言编写的程序进行测试。这种测试是以代码包为单位的。当然,这还需要测试源码文件的帮助。关于怎样编写并写好Go程序测试代码,我们会在本章的第二节加以详述。在这里,我们只讨论怎样使用命令启动测试。
go test
命令会自动测试每一个指定的代码包。当然,前提是指定的代码包中存在测试源码文件。测试源码文件是名称以“_test.go”为后缀的、内含若干测试函数的源码文件。测试函数一般是以“Test”为名称前缀并有一个类型为“testing.T”的参数声明的函数.
现在,我们来测试goc2p项目中的几个代码包。在使用go test
命令时指定代码包的方式与其他命令无异——使用代码包导入路径。如果需要测试多个代码包,则需要在它们的导入路径之间加入空格以示分隔。示例如下:
hc@ubt:~$ go test basic cnet/ctcp pkgtool ok basic 0.012s ok cnet/ctcp 2.014s ok pkgtool 0.014s
go test
命令在执行完所有的代码包中的测试文件之后,会以代码包为单位打印出测试概要信息。在上面的示例中,对应三个代码包的三行信息的第一列都是“ok”。这说明它们都通过了测试。每行的第三列显示运行相应测试所用的时间,以秒为单位。我们还可以在代码包目录下运行不加任何参数的运行go test
命令。其作用和结果与上面的示例是一样的。
另外,我们还可以指定测试源码文件来进行测试。这样的话,go test
命令只会执行指定文件中的测试,像这样:
hc@ubt:~/golang/goc2p/src/pkgtool$ go test envir_test.go # command-line-arguments ./envir_test.go:25: undefined: GetGoroot ./envir_test.go:40: undefined: GetAllGopath ./envir_test.go:81: undefined: GetSrcDirs ./envir_test.go:83: undefined: GetAllGopath ./envir_test.go:90: undefined: GetGoroot FAIL command-line-arguments [build failed]
我们看到,与指定源码文件进行编译或运行一样,命令程序会为指定的源码文件生成一个虚拟代码包——“command-line-arguments”。但是,测试并没有通过。但其原因并不是测试失败,而是编译失败。对于运行这次测试的命令程序来说,测试源码文件envir_test.go是属于代码包“command-line-arguments”的。并且,这个测试源码文件中使用了库源码文件envir.go中的函数。但是,它却没有显示导入这个库源码文件所属的代码包。这显然会引起编译错误。如果想解决这个问题,我们还需要在执行命令时加入这个测试源码文件所测试的那个源码文件。示例如下:
hc@ubt:~/golang/goc2p/src/pkgtool$ go test envir_test.go envir.go ok command-line-arguments 0.010s
现在,我们故意使代码包pkgtool
中的某个测试失败。现在我们再来运行测试:
hc@ubt:~$ go test basic cnet/ctcp pkgtool ok basic 0.010s ok cnet/ctcp 2.015s --- FAIL: TestGetSrcDirs (0.00 seconds) envir_test.go:85: Error: The src dir '/usr/local/go/src/pkg' is incorrect. FAIL FAIL pkgtool 0.009s
我们通过以上示例中的概要信息获知,测试源码文件中envir_test.go的测试函数TestGetSrcDirs
go test
명령은 지정된 각 코드 패키지를 자동으로 테스트합니다. 물론, 지정된 코드 패키지에 테스트 소스코드 파일이 존재한다는 전제가 있다. 테스트 소스코드 파일은 이름 뒤에 "_test.go"가 붙은 소스코드 파일로, 여러 가지 테스트 함수를 포함하고 있습니다. 테스트 함수는 일반적으로 이름 앞에 "Test"가 붙고 "testing.T" 유형의 매개변수 선언이 있는 함수입니다.이제 goc2p 프로젝트에서 여러 코드 패키지를 테스트해 보겠습니다. go test
명령을 사용할 때 코드 패키지를 지정하는 것은 다른 명령과 동일합니다(코드 패키지 가져오기 경로 사용). 여러 코드 패키지를 테스트해야 하는 경우 가져오기 경로 사이에 공백을 추가하여 구분해야 합니다. 예를 들면 다음과 같습니다. rrreee go test
명령은 코드 패키지의 모든 테스트 파일을 실행한 후 코드 패키지 단위로 테스트 요약 정보를 출력합니다. 위의 예에서 세 개의 코드 패키지에 해당하는 세 줄의 정보 중 첫 번째 열은 "ok"입니다. 이는 모두 테스트를 통과했다는 의미입니다. 각 행의 세 번째 열에는 해당 테스트를 실행하는 데 걸린 시간(초)이 표시됩니다. 코드 패키지 디렉터리에 매개 변수 없이 go test
명령을 실행할 수도 있습니다. 그 기능과 결과는 위의 예와 동일합니다.
go test
명령은 다음과 같이 지정된 파일에서만 테스트를 실행합니다. 🎜rrreee🎜컴파일하거나 실행할 소스 코드 파일을 지정하는 것과 마찬가지로 명령 프로그램도 지정된 소스 코드 파일을 컴파일하거나 실행합니다. 더미 코드 패키지("명령줄 인수")를 생성합니다. 그러나 테스트는 통과하지 못했습니다. 하지만 그 이유는 테스트가 실패했기 때문이 아니라 컴파일이 실패했기 때문입니다. 이 테스트를 실행하는 명령 프로그램의 경우 테스트 소스 코드 파일 envir_test.go는 코드 패키지 "command-line-arguments"에 속합니다. 또한, 본 테스트 소스코드 파일은 라이브러리 소스코드인 envir.go의 기능을 사용하고 있습니다. 그러나 이 라이브러리의 소스 코드 파일을 가져온 코드 패키지는 표시되지 않습니다. 이로 인해 분명히 컴파일 오류가 발생합니다. 이 문제를 해결하려면 명령을 실행할 때 이 테스트 소스 코드 파일에서 테스트한 소스 코드 파일도 추가해야 합니다. 예는 다음과 같습니다. 🎜rrreee🎜이제 코드 패키지 pkgtool
에서 의도적으로 테스트에 실패했습니다. 이제 테스트를 다시 실행해 보겠습니다. 🎜rrreee🎜위 예제의 요약 정보를 통해 테스트 소스 파일에 있는 envir_test.go의 테스트 함수 TestGetSrcDirs
에서 테스트가 실패했음을 알 수 있습니다. 테스트에 실패한 테스트 소스 파일 이름이 포함된 정보 줄에서 테스트 소스 파일 이름 바로 뒤의 콜론으로 구분된 숫자는 오류 메시지가 있는 줄 번호이고, 해당 줄 뒤의 콜론으로 구분된 숫자는 다음과 같습니다. 숫자는 오류 메시지입니다. 이 오류 메시지의 내용은 사용자가 작성한 것입니다. 또한 요약 정보의 마지막 줄에는 "FAIL"이라는 접두사가 붙습니다. 이는 코드 패키지 pkgtool에 대한 테스트가 통과되지 않았음을 나타냅니다. 실패 이유는 이전 메시지에 설명되어 있습니다. 🎜🎜일반적으로 테스트 소스 코드 파일과 테스트 중인 소스 코드 파일을 동일한 코드 패키지에 넣습니다. 또한, 이들 소스코드 파일에 선언된 패키지 이름도 동일합니다. 또한, 또 다른 옵션이 있습니다. 즉, 테스트 소스 코드 파일에 선언된 패키지 이름은 패키지 이름에 "_test" 접미사를 더한 것일 수 있습니다. 이러한 종류의 테스트 소스 코드 파일을 패키지 외부 테스트 소스 코드 파일이라고 부릅니다. 그러나 패키지 외부에서 소스 코드 파일을 테스트하는 데에는 단점이 있습니다. 즉, 테스트 중인 소스 코드 파일의 패키지 수준 프라이빗 프로그램 엔터티는 패키지 수준 프라이빗 변수, 함수, 및 구조 유형. 둘이 속한 코드 패키지가 다르기 때문이다. 따라서 우리는 일반적으로 패키지 외부 테스트 소스 코드 파일을 거의 작성하지 않습니다. 🎜🎜🎜태그 정보🎜🎜 go test
명령의 태그 처리 부분은 너무 크고 복잡하여 Go 언어 개발자는 go test
명령의 본문에서 로직의 이 부분을 옮겨야 합니다. 프로그램 별도의 소스코드 파일을 분리하여 생성합니다. go test
명령에는 컴파일 작업이 포함되어 있으므로 go build
명령에 사용 가능한 모든 태그를 허용할 수 있습니다. 그 외에도 독특한 표시가 많이 있습니다. 이러한 태그는 명령 자체의 동작을 제어하는 데 사용되며, 일부는 테스트 프로세스 및 환경을 제어 및 설정하는 데 사용되며, 일부는 보다 자세한 테스트 결과 및 통계 정보를 생성하는 데 사용됩니다. go test
命令的标记处理部分是庞大且繁杂的,以至于使Go语言的开发者们不得不把这一部分的逻辑从go test
命令程序主体中分离出来并建立单独的源码文件。因为go test
命令中包含了编译动作,所以它可以接受可用于go build
命令的所有标记。另外,它还有很多特有的标记。这些标记的用于控制命令本身的动作,有的用于控制和设置测试的过程和环境,还有的用于生成更详细的测试结果和统计信息。
可用于go test
命令的几个比较常用的标记是-c
、-i
和-o
。这两个就是用于控制go test
命令本身的动作的标记。详见下表。
表0-6 go test
命令的标记说明
标记名称 | 标记描述 |
---|---|
-c | 生成用于运行测试的可执行文件,但不执行它。这个可执行文件会被命名为“pkg.test”,其中的“pkg”即为被测试代码包的导入路径的最后一个元素的名称。 |
-i | 安装/重新安装运行测试所需的依赖包,但不编译和运行测试代码。 |
-o | 指定用于运行测试的可执行文件的名称。追加该标记不会影响测试代码的运行,除非同时追加了标记-c 或-i 。 |
上述这几个标记可以搭配使用。搭配使用的目的可以是让go test
命令既安装依赖包又编译测试代码,但不运行测试。也就是说,让命令程序跑一遍运行测试之前的所有流程。这可以测试一下测试过程。注意,在加入-c
go test
명령과 함께 사용할 수 있는 몇 가지 일반적인 태그는 -c
, -i
및 -입니다. 아
. 이 두 개는 go test
명령 자체의 동작을 제어하는 데 사용되는 태그입니다. 자세한 내용은 아래 표를 참조하세요.
이름 표시 | 설명 표시 |
---|---|
-c | 테스트 실행을 위한 실행 파일을 생성하지만 실행하지는 않습니다. 이 실행 파일의 이름은 "pkg.test"로 지정됩니다. 여기서 "pkg"는 테스트 중인 코드 패키지 가져오기 경로의 마지막 요소 이름입니다. |
-i | 테스트 실행에 필요한 종속성 패키지를 설치/재설치하지만 테스트 코드를 컴파일하고 실행하지는 않습니다. |
-o | 테스트를 실행하는 데 사용되는 실행 파일의 이름을 지정합니다. -c 또는 -i 태그도 추가하지 않으면 이 태그를 추가해도 테스트 코드 실행에 영향을 주지 않습니다. |
go test
명령이 종속성 패키지를 설치하고 테스트 코드를 컴파일하지만 테스트를 실행하지는 않도록 하는 것입니다. 즉, 테스트를 실행하기 전에 명령 프로그램이 모든 프로세스를 통해 실행되도록 하십시오. 이는 테스트 프로세스를 테스트하는 데 사용될 수 있습니다. -c
태그를 추가한 후 명령 프로그램은 테스트를 실행하는 데 사용되는 실행 파일을 현재 디렉터리에 저장합니다. 【관련 추천: 🎜Go 비디오 튜토리얼🎜, 🎜프로그래밍 교육🎜】🎜위 내용은 바둑 테스트의 기능은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!