2017-02-15 4 views
0

私はインポートを持っている:インポートされたライブラリを正しく模倣する方法は?

私はその後、私は私が作成したコードは、現在の設定で正しく動作することを確認53 AWSルートでホスト・ゾーンで動作するように使用
import { 
    "github.com/aws/aws-sdk-go/service/route53" 
} 

開発プロセスを簡略化するために、開発中に使用するライブラリメソッドのモックを作成します。

私はenv="development"またはenv="production"のような設定でキーを持っています。

私の計画では、自分のオブジェクトであるroute53を必要なメソッドに追加し、envが開発されている場合はインポートします。

どうすればよいですか? はこのように、条件付きのインポートをサポートしていgolang:

if (env=="development") { 
    import "./route53-mock" 
} else { 
    "github.com/aws/aws-sdk-go/service/route53" 
} 

答えて

-1

"条件付きのインポートのサポートgolangい[を?]"。答え:いいえ。言語仕様を見てみましょう。

「どうすればよいですか?」答え:あなたの環境/ build -tags/cmdlineargs/whateverに応じて、モックと実際のルートの間を切り替える独自のパッケージを通してroute53へのコールをルーティングします。

2

Goは条件付きインポートをサポートしていません。少なくとも、現在の安定版ではありません。以前route53.Route53を使用するどこ

type TrafficPolicyLister interface { 
    ListTrafficPolicies(*route53.ListTrafficPoliciesInput) (*route53.ListTrafficPoliciesOutput, error) 
} 

は今、あなたはインターフェイスを使用することができます:あなたが使用する必要があるメソッドを持つ

interfaceは、この問題を解決するための良いフィット感です。生産では、(そのインタフェースを実装している)タイプroute53.Route53のオブジェクトを渡すだろうが、開発中に、あなたはモックを渡すことができます:

type TrafficPolicyListerMock struct {} 

func (t *TrafficPolicyListerMock) ListTrafficPolicies(input *route53.ListTrafficPoliciesInput) (*route53.ListTrafficPoliciesOutput, error) { 
    // return whatever you want your mock to return 
} 
1

あなたはユニットテストを実行したい場合は、answer of @csmをお読みください。

開発環境(単体テストではない)を使用する場合は、おそらくminioを見て、実質的に自己ホストS3の実装を見てください。環境変数を使用してS3エンドポイントを注入する必要があります。それから、開発のために独自のミニサーバーを自由に使用することができます。

関連する問題