2017-02-15 14 views
0

У меня есть импорт:Как правильно издеваться над импортированной библиотекой?

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

который я затем использовать для работы с зонами принимающих в AWS Route 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 поддержки условного с импортом [?]". Ответ: Нет. Просто взгляните на спецификацию языка.

«Как мне это сделать лучше?» Ответ: Маршрут вызывает route53 через ваш собственный пакет, который переключается между mock и real route53 в зависимости от вашей среды/build -tags/cmdlineargs/whatever.

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. Затем вы можете использовать свой собственный мини-сервер для своей разработки.

 Смежные вопросы

  • Нет связанных вопросов^_^