ホームページ >バックエンド開発 >Golang >Golang を使用して依存関係注入を含む単体テストを作成する方法

Golang を使用して依存関係注入を含む単体テストを作成する方法

PHPz
PHPz転載
2024-02-11 15:42:08413ブラウズ

如何使用 Golang 创建单元测试依赖注入

php エディターの Youzi が、Golang を使用して単体テストの依存関係注入を作成する方法に関する記事を提供します。ソフトウェア開発では、単体テストは重要な部分であり、依存関係の挿入は、単体テストをより適切に実行するのに役立つ一般的に使用される設計パターンです。この記事では、テスト可能なコードをより簡単に作成できるように、Golang を使用して依存関係注入を実装する方法を簡単に紹介します。一緒に探検しましょう!

質問内容

例えばユーザーAPIを作成したい このような依存性注入構造を持つ

リーリー

次に、ユーザー作成 API の単体テストを作成したいと考えていますが、実際にデータベースと対話したりシミュレーションしたりしたくありません。 userUseCase にはリポジトリが必要なので、SaveUserToDB 関数用にモックの userRepository を作成することになります。

これは正しい使用方法ですか?

func Bootstrap(config *BootstrapConfig) {
// setup repositories
userRepository := repository.NewUserRepository(config.Log)
// setup producer
userProducer := messaging.NewUserProducer(config.Producer, config.Log)
// setup use cases
userUseCase := usecase.NewUserUseCase(config.DB, config.Log, config.Validate, userRepository, userProducer)
// setup controller
userController := http.NewUserController(userUseCase, config.Log)
routeConfig := route.RouteConfig{
    App:               config.App,
    UserController:    userController,
}
routeConfig.Setup()
}

回避策

依存関係の注入では、実際に依存関係を注入する必要があります。 Bootstrap は依存関係を作成しているため、これは依存関係の注入ではないと言えます。テストで Bootstrap を使用する場合、これは依存関係の注入ではありません。

したがって、func Bootstrap(config *BootstrapConfig) を少なくとも func Bootstrap(config *BootstrapConfig, userRepository *repository.User) に変更する必要があります。

次に、テストで mockRepoBootstrap に渡します。

リーリー

Bootstrap は依存関係を作成すべきではないため、userProduceruserUseCase などに適用する必要があります。

以上がGolang を使用して依存関係注入を含む単体テストを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。