2017-02-15 44 views
0

我有一個導入:如何正確模擬導入的庫?

import { 
    "github.com/aws/aws-sdk-go/service/route53" 
} 

然後我使用AWS路線53 我看到我的代碼創建工作正常現配現用設置主機區工作。

爲了簡化開發過程,我想創建一個我在開發時使用的庫方法的模擬。

我在配置中有一個鍵,像這樣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的呼叫,這個包在模擬和真實路由53之間切換。

2

Go不支持條件導入 - 至少不在當前的穩定版本中。

你需要使用方法的一個interface是一個不錯的選擇來解決這個問題:

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

現在,您可以使用該接口,無論你以前會用route53.Route53。在生產中,你會通過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端點。然後,您可以自由使用自己的minio服務器進行開發。