MokStubオブジェクトから別のチェインコードをインスタンス化して呼び出す際に、golangでユニットテストをローカルで実行しようとしたときにコンパイルの問題が発生しました。以下は私のファイル階層です:Hyperledgerファブリックユニットのベンダーフォルダを折りたたむことなくクロスチェインコードを呼び出す
ここでのシナリオは基本的に、チェーンコードの1つ、たとえばuser.goを含み、他のチェーンコードtransaction.goを呼び出します。両方のディレクトリのベンダフォルダには、まったく同じ内容が含まれています。
問題は、トランザクション・モック・オブジェクトがトランザクションチェーンコード/ベンダー/内のinitメソッドをユーザー定義ルーチンの代わりに探すため、user_test.goのshim.NewMockStubを介してトランザクション・チェーンコードの新しいインスタンスをインスタンス化しようとすると発生します。チェーンコード/ベンダー/、同じパッケージを持つベンダーのフォルダ(と同じ方法)にもかかわらず。
トランザクションチェーンコード&のユーザーチェーンコードの親ディレクトリに単一のベンダーフォルダを持つことで、このエラーを取り除くことができましたが、開発目的ではできません。ベンダーのフォルダをそれぞれの場所に置いて、この単体テストの問題を解決する方法を教えてください。
どのようなツールを商品化に使用していますか? 'vendor'ディレクトリのパッケージにはどのようなインポートパスを使いますか? – yazgazan
@ yazgazanどのようなツールが商品化に使用されているかは重要ですか? 私はgovendorを使用しています。インポートパスは、ベンダのディレクトリ内のパッケージは元のパッケージと同じです –
"従来の"アプローチはライブラリではなく、ベンダのバイナリです。あなたのベンダーツールがデプロイツリーを平らにしている場合(ネストされたベンダーディレクトリを持たない場合)、ライブラリ内のベンダーリングを取り除くことができます。おそらく 'transaction-chaincode'に' user-chaincode'を展開することで問題を解決することができますが、これはベンダーに苦痛を与えないようにします。私が考えるベストな解決策は、あなたの親ディレクトリ(親ディレクトリがあなたのリポジトリのルートであると仮定して)でベンダリングを行うことです。 – yazgazan