Go アプリケーションでは、サービスごとに個別のファイルで定義されたゲッター関数があります。各関数はデータベース接続と SQL パラメーターを入力として受け取り、構造化データまたはエラーを返します。この問題は、メイン パッケージからこれらの関数をモックしようとすると発生します。
方法 1: 関数の値をモックする
Go では、関数を直接モックすることはできません。ただし、変数、構造体のフィールド、関数パラメーターを含む関数値をモックすることはできます。これを行うには、関数を変数として定義するか、パラメータとして別の関数に渡します。
方法 2: インターフェイスを使用する
推奨されるアプローチは、インターフェイスをモックすることです。 。ゲッター関数の機能を表すインターフェイスを定義し、そのインターフェイスの実際のバージョンとモック バージョンを実装します。これにより、テスト中にモック実装を挿入できます。
方法 3: データベース接続をモックする
ゲッター関数がデータベース接続に依存している場合、データベースをモックできます。代わりに接続タイプを選択します。実際のデータベース接続のメソッドを模倣するインターフェイスを定義し、モック バージョンを実装します。これにより、テスト中にモック接続をゲッター関数に渡すことができます。
type ProductRepository interface { GetProductById(db DBIface, ID int) (p Product, err error) } type ProductStore struct{} func (ProductStore) GetProductById(db DBIface, ID int) (p Product, err error) { // Your original implementation } type ProductRepositoryMock struct{} func (ProductRepositoryMock) GetProductById(DB DBIface, ID int) (p Product, err error) { // Mock implementation }
この例では、ProductRepository インターフェイスで GetProductById 関数が定義されています。 ProductStore 構造体は、実際のデータベース接続を使用してインターフェイスを実装します。 ProductRepositoryMock 構造体は、テスト用のモック実装を提供します。
インターフェイスまたはモック関数値を使用すると、元の関数宣言を変更せずに Go でモックを実現でき、テストと分離が容易になります。
以上が単体テストのために Go で関数を効果的にモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。