依存関係の注入は、Go のサードパーティ ライブラリを通じて実装できます。ワイヤー ライブラリを使用することをお勧めします。依存関係注入モードでは、依存関係を動的に注入し、テスト コードと運用コードを分離し、テストの保守性とスケーラビリティを向上させることができます。 Wire は、疑似依存関係を注入できる依存関係インジェクターを提供します。たとえば、この例では、疑似 CustomerRepository を注入することによって CustomerService の GetCustomer メソッドがテストされ、それによってテストの品質が向上します。
Go での関数テスト依存関係の挿入
はじめに
単体テストでは、多くの場合、テスト対象の関数に依存関係を提供する必要があります。従来のアプローチは、依存関係をテスト対象の関数のパラメーターとして直接渡すことです。ただし、このアプローチではテストとテスト対象のコードが密接に結合するため、保守と拡張が困難になります。
依存関係の注入
依存関係の注入は、実行時にオブジェクトのコンストラクターまたはメソッドに依存関係を動的に注入できるようにする設計パターンです。依存関係の注入を使用すると、テスト コードと運用コードを分離できるため、テストの保守性とスケーラビリティが向上します。
Go での依存関係の注入
Go には依存関係の注入フレームワークが組み込まれていませんが、サードパーティのライブラリを利用することで実現できます。 [wire](https://github.com/google/wire) ライブラリを使用することをお勧めします。これは、Google によって開発された軽量の依存関係注入ライブラリです。
実践的なケース
CustomerRepository
に依存するCustomerService
があるとします:
type CustomerService struct { repo CustomerRepository } func (s *CustomerService) GetCustomer(id int) (*Customer, error) { return s.repo.Get(id) }
GetCustomer
メソッドをテストするには、モックの CustomerRepository
を提供する必要があります。
ワイヤー実装を使用する
ワイヤーを使用すると、次のように依存関係インジェクターを作成できます:
func provideCustomerService(repo CustomerRepository) (*CustomerService, error) { return &CustomerService{ repo: repo, }, nil }
その後、テストで次のように使用できます。モックを注入するための配線 CustomerRepository
:
func TestGetCustomer(t *testing.T) { repo := &fakeCustomerRepository{} // 模拟的 CustomerRepository service, err := provideCustomerService(repo) if err != nil { t.Fatalf("provideCustomerService: %v", err) } // 测试 CustomerService 的 GetCustomer 方法 }
依存関係の注入を使用すると、テスト対象のコードを変更せずにテストにモックの依存関係を提供できるため、テストの保守性とスケーラビリティが向上します。
以上がGolang 関数テストでの依存関係の注入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。