종속성 주입은 타사 라이브러리를 통해 Go에서 구현할 수 있습니다. 와이어 라이브러리를 사용하는 것이 좋습니다. 종속성 주입 모드를 사용하면 종속성을 동적으로 주입하고, 테스트 및 프로덕션 코드를 분리하고, 테스트 유지 관리성과 확장성을 향상할 수 있습니다. Wire는 모의 종속성을 주입할 수 있는 종속성 주입기를 제공합니다. 예를 들어, CustomerService의 GetCustomer 메서드는 모의 CustomerRepository를 주입하여 테스트되므로 테스트 품질이 향상됩니다.
Go에서 함수 테스트 종속성 주입
소개
단위 테스트에서는 테스트 중인 함수에 대한 종속성을 제공해야 하는 경우가 많습니다. 전통적인 접근 방식은 테스트 중인 함수의 매개변수로 종속성을 직접 전달하는 것입니다. 그러나 이 접근 방식은 테스트 중인 코드와 테스트를 긴밀하게 연결하므로 유지 관리 및 확장이 어렵습니다.
종속성 주입
종속성 주입은 런타임 시 개체의 생성자나 메서드에 종속성을 동적으로 주입할 수 있도록 하는 디자인 패턴입니다. 종속성 주입을 사용하면 테스트 코드와 프로덕션 코드를 분리할 수 있으므로 테스트의 유지 관리성과 확장성이 향상됩니다.
Go의 종속성 주입
Go에는 종속성 주입 프레임워크가 내장되어 있지 않지만 타사 라이브러리의 도움으로 구현할 수 있습니다. Google에서 개발한 경량 종속성 주입 라이브러리인 [wire](https://github.com/google/wire) 라이브러리를 사용하는 것이 좋습니다.
실용 사례
CustomerRepository
에 의존하는 CustomerService
가 있다고 가정합니다. CustomerService
,它依赖于一个 CustomerRepository
:
type CustomerService struct { repo CustomerRepository } func (s *CustomerService) GetCustomer(id int) (*Customer, error) { return s.repo.Get(id) }
要测试 GetCustomer
方法,我们需要为它提供一个模拟的 CustomerRepository
。
使用 wire 实现
使用 wire,我们可以创建一个依赖注入器,如下所示:
func provideCustomerService(repo CustomerRepository) (*CustomerService, error) { return &CustomerService{ repo: repo, }, nil }
然后,在测试中,我们可以使用 wire 来注入模拟的 CustomerRepository
func TestGetCustomer(t *testing.T) { repo := &fakeCustomerRepository{} // 模拟的 CustomerRepository service, err := provideCustomerService(repo) if err != nil { t.Fatalf("provideCustomerService: %v", err) } // 测试 CustomerService 的 GetCustomer 方法 }
GetCustomer
메서드를 테스트하려면, 우리는 모의 CustomerRepository
를 제공해야 합니다. 🎜wire를 사용하여 구현🎜🎜🎜wire를 사용하여 다음과 같은 종속성 주입기를 만들 수 있습니다. 🎜rrreee🎜 그런 다음 테스트에서 wire를 사용하여 모의 CustomerRepository
를 주입할 수 있습니다. 🎜rrreee🎜 종속성 주입을 사용하면 테스트 중인 코드를 수정하지 않고도 테스트에 대한 모의 종속성을 제공할 수 있으므로 테스트의 유지 관리성과 확장성이 향상됩니다. 🎜위 내용은 Golang 함수 테스트의 종속성 주입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!