2017-02-15 42 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服务器进行开发。