ホームページ  >  記事  >  バックエンド開発  >  アサーション: モック: メソッド呼び出しが予期せぬものであったため、何を返せばよいかわかりません Go で単体テストを作成中にエラーが発生しました

アサーション: モック: メソッド呼び出しが予期せぬものであったため、何を返せばよいかわかりません Go で単体テストを作成中にエラーが発生しました

王林
王林転載
2024-02-10 09:00:18493ブラウズ

断言:模拟:我不知道要返回什么,因为方法调用是意外的 在 Go 中编写单元测试时出错

この記事では、php エディターの Xiaoxin が、Go 言語で単体テストを作成するときに発生する一般的なエラー、つまりアサーション エラーについて紹介します。単体テストを作成するときに、戻り値を決定できない状況に遭遇することがあります。これにより、予期しないメソッド呼び出しエラーが発生する可能性があります。この記事では、アサーション エラーを適切に処理し、単体テストの精度と信頼性を確保するために役立つ、この問題の原因と解決策について説明します。

質問内容

Go で testify を使用して、サービス メソッドの単体テストを作成します。更新メソッドを除くすべてのメソッドは正常に動作します。更新中にメソッド内で, 更新メソッドで同じサービスの別のメソッド (「getbyid」) を呼び出します。

サービスに更新メソッドを実装します:

リーリー

mockrepo 更新方法:

リーリー

テスト実装:

リーリー

ここでテストを実行すると、次のエラーが表示されます:

リーリー

テスト関数の実装で mock.on("getbyid") を呼び出す前後に .on("update") を呼び出してみましたが、機能せず、モックリポの更新機能も変更しましたが、機能しませんでした。

解決策

問題の解決をお手伝いさせていただきます。関連するコードを投稿するためだけに、いくつかの簡略化を加えてリポジトリをコピーしました。あなたの解決策が間違っていなければ、基盤となるパッケージ (teamrepo) によって提供されるいくつかのメソッドを呼び出すサービス (teamservice) があります。 teamservice 構造の update メソッドをテストしたいと考えています。確認した後、最初にコードを示し、次に各ファイルについて説明します。

リポ/repo.go リーリー

このファイルには、シミュレートするメソッドがあります。メソッドは、

getbyidupdate です。明らかにこれは実際のコードではありませんが、現時点ではそれは問題ではありません。

サービス/service.go リーリー

ここでは、テスト コード内で、テスト対象システムとなるサービス (

sut) を確認できます。依存関係の注入では、インターフェイス teamrepointerface を通じて注入された repo パッケージによって提供される機能を利用します。

services/service_test.go リーリー

コード内には、何が起こっているかを詳しく説明するコメントがいくつかあります。ご想像のとおり、問題は、コード内にこの呼び出しが欠落していることです。

repomock.on("getbyid", 1).return(repo.team{id: 1,teamownerid: 1, name: "test"}, nil).times(1)

私のソリューションを実行すれば、あなたにとってもうまくいくはずです。

これで問題が解決した場合、または他にご質問がある場合は、お知らせください。

以上がアサーション: モック: メソッド呼び出しが予期せぬものであったため、何を返せばよいかわかりません Go で単体テストを作成中にエラーが発生しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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