이동 중 Local Plural 패키지를 테스트하고 싶습니다.
9679 단어 goprogrammingtestingwebdev
calculate
디렉토리 아래의 모든 패키지( outLog
및 src
)를 테스트하고 싶습니다../src
|- calculate/
|- calculate.go
|- calculate_test.go
|- go.mod
|- outLog/
|- outLog.go
|- outLog_test.go
|- go.mod
main.go
go.mod
go.mod
와 calculate
에 outLog
를 만들지 않으면 아래 명령을 사용하여 모든 패키지를 테스트할 수 있습니다(즉, calculate
와 outLog
를 모듈로 초기화하지 않으면).그러나 이러한 패키지를 모듈로 초기화하지 않으면
main.go
에서 사용할 수 없으므로 초기화해야 합니다.이 기사의 목표는 로컬 복수형 패키지를 Go에서 패키지(모듈)로 초기화한 후 테스트하는 방법을 아는 것입니다.
Google에서 좋은 TIPS를 찾을 수 없어서 시행 착오를 겪었습니다. 공유하고 싶습니다.
반면 Go에는
interface
가 있으므로 DI(Dependency Injection) on Go을 사용할 수 있습니다. 내 생각에는 모든 패키지 간의 종속성을 분할한 후 각 로컬 패키지를 테스트하는 것이 더 나을 것 같지만(단일 책임 원칙?), 저는 Go를 처음 사용하는 사람이라 현재 DI를 사용하기 어렵습니다. DI에 대한 중간 진행으로 이 기사 주제를 공유했습니다.각 로컬 패키지(모듈) 초기화
테스트하기 전에 다음 명령을 사용하여 각 패키지를 초기화합니다.
go mod init [any name of your package you decided]
go mod tidy
그런 다음 각 패키지에 대한 경로를 만듭니다.
main.go
가 있는 디렉토리에서 다음 명령을 실행합니다.go mod edit -replace [any name of your package you decided]=[relative path to each module]
go mod tidy
이 글에서는 각 패키지에
playground/calculate
, playground/outLog
라는 이름을 붙였으므로 main.go
는 다음과 같은 소스 코드를 가진다.package main
import (
"fmt"
"playground/calculate"
outlog "playground/outLog"
)
func main() {
ol := outlog.OutLog{To_console: true, To_file: false}
ol.Error("Success to output an Error🎉")
res := calculate.Calculate(3)
fmt.Printf("The result of calculation:%d", res)
}
모든 패키지를 테스트하는 방법?
main.go가 있는 디렉토리의 테스트 파일
아래와 같이 main.go
가 있는 디렉토리에 테스트 파일을 만들면 모든 패키지를 테스트할 수 있다고 확신합니다.
package main
import (
"playground/calculate"
outlog "playground/outLog"
"testing"
)
func TestCal(t *testing.T) {
result := calculate.Calculate(2)
if result != 2*2 {
t.Fatal("Not match the result of calculation.")
}
}
func TestConsole(t *testing.T) {
outLog := outlog.OutLog{To_console: true, To_file: false}
rec, err := outLog.Error("Please find me!!🐬")
if rec == "" || err != nil {
t.Fatal("The failed to output an error.")
}
}
그런 다음 main.go
가 있는 디렉토리에서 다음 명령을 실행합니다.
go test -v ./...
그러나 main.go
가 있는 디렉토리에 많은 테스트 파일을 만들어야 하기 때문에 이런 방식으로 테스트하고 싶지 않습니다.
go test -v [패키지 이름]을 사용하여 모든 패키지 테스트
이것이 더 나은 해결책이라고 생각하지만 패키지에 로그를 사용하면 이 명령이 길어질 것입니다.
이 기사에서 go.mod
의 main.go
는 다음과 같습니다.
module playground/main
go 1.18
replace playground/outLog => ./src/outLog
replace playground/calculate => ./src/calculate
require (
playground/calculate v0.0.0-00010101000000-000000000000
playground/outLog v0.0.0-00010101000000-000000000000
)
main.go
및 playground/calculate
를 테스트하려면 playground/outLog
가 있는 디렉토리에서 다음 명령을 실행합니다.
go test -v playground/calculate playground/outLog
해당 명령이 실행된 후 다음 결과를 얻습니다.
=== RUN TestCal
--- PASS: TestCal (0.00s)
PASS
ok playground/calculate (cached)
=== RUN TestConsole
2022/06/17 15:55:19 [2022-06-17T15:55:19+09:00][Error] - Please find me!!🐬
--- PASS: TestConsole (0.00s)
PASS
ok playground/outLog (cached)
이러한 방식으로 디렉토리main.go
에 너무 많은 테스트 파일이 있을 필요가 없습니다. 좋은 지적입니다.
결론
이 문제를 해결할 최선의 아이디어가 없습니다. 이를 해결하기 위한 좋은 아이디어가 있으시면 알려주시면 대단히 감사하겠습니다.
이 원본 기사는 내가 쓴 다음과 같습니다. 이것은 이 원본 기사의 일부를 일본어에서 영어로 번역한 것입니다.
Go로 하나도에 複数팍케이지의 테스트를 하러 가다
zenn.dev
Reference
이 문제에 관하여(이동 중 Local Plural 패키지를 테스트하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/akirakashihara/i-want-to-test-local-plural-packages-on-go-1lhp
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package main
import (
"playground/calculate"
outlog "playground/outLog"
"testing"
)
func TestCal(t *testing.T) {
result := calculate.Calculate(2)
if result != 2*2 {
t.Fatal("Not match the result of calculation.")
}
}
func TestConsole(t *testing.T) {
outLog := outlog.OutLog{To_console: true, To_file: false}
rec, err := outLog.Error("Please find me!!🐬")
if rec == "" || err != nil {
t.Fatal("The failed to output an error.")
}
}
go test -v ./...
module playground/main
go 1.18
replace playground/outLog => ./src/outLog
replace playground/calculate => ./src/calculate
require (
playground/calculate v0.0.0-00010101000000-000000000000
playground/outLog v0.0.0-00010101000000-000000000000
)
go test -v playground/calculate playground/outLog
=== RUN TestCal
--- PASS: TestCal (0.00s)
PASS
ok playground/calculate (cached)
=== RUN TestConsole
2022/06/17 15:55:19 [2022-06-17T15:55:19+09:00][Error] - Please find me!!🐬
--- PASS: TestConsole (0.00s)
PASS
ok playground/outLog (cached)
이 문제를 해결할 최선의 아이디어가 없습니다. 이를 해결하기 위한 좋은 아이디어가 있으시면 알려주시면 대단히 감사하겠습니다.
이 원본 기사는 내가 쓴 다음과 같습니다. 이것은 이 원본 기사의 일부를 일본어에서 영어로 번역한 것입니다.
Go로 하나도에 複数팍케이지의 테스트를 하러 가다
zenn.dev
Reference
이 문제에 관하여(이동 중 Local Plural 패키지를 테스트하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/akirakashihara/i-want-to-test-local-plural-packages-on-go-1lhp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)