2017-02-15 7 views
0

Ich habe einen Import:Wie man eine importierte Bibliothek korrekt vortäuscht?

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

die ich dann mit dem Host-Zonen in AWS Strecke nutzen arbeiten 53. Ich sehe, dass der Code, den ich Werke geschaffen richtig nun mit dem aktuellen Setup.

Um den Entwicklungsprozess zu vereinfachen, möchte ich eine Kopie der Bibliotheksmethoden erstellen, die ich während der Entwicklung verwende.

Ich habe einen Schlüssel in Config, wie diese env="development" oder env="production".

Mein Plan ist es mein eigenes Objekt hinzufügen, die route53 mit den benötigten Methoden sind und es importieren, wenn die env Entwicklung.

Wie mache ich es besser? Hat golang bedingten Import zu unterstützen, wie folgt aus:

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

Antwort

-1

"Does bedingten Import golang unterstützen [?]". Antwort: Nein. Schauen Sie sich einfach die Sprachspezifikation an.

"Wie mache ich es besser?" Antwort: Routen Sie route53 durch Ihr eigenes Paket, das abhängig von Ihrer Umgebung zwischen Build und -tags/cmdlineargs/was auch immer wechselt.

2

Go unterstützt bedingten Import nicht - zumindest nicht in der aktuellen stabilen Version.

Ein interface mit den Methoden, die Sie ist eine gute Passform verwenden, müssen dieses Problem zu lösen:

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

Jetzt können Sie die Schnittstelle verwenden, wo immer Sie vorher route53.Route53 verwenden würden. In der Produktion würden Sie ein Objekt vom Typ route53.Route53 passieren (die diese Schnittstelle implementiert), aber während der Entwicklung kann man ein Modell übergeben:

type TrafficPolicyListerMock struct {} 

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

Wenn Sie Unit-Tests zu tun, lesen Sie die answer of @csm.

Wenn Sie eine Entwicklungsumgebung haben möchten (nicht Komponententests), sollten Sie sich wahrscheinlich minio ansehen, effektiv eine selbst gehostete S3-Implementierung. Sie sollten die Umgebungsvariable verwenden, um die S3-Endpunkte zu injizieren. Dann können Sie Ihren eigenen Mini-Server für Ihre Entwicklung verwenden.

Verwandte Themen