Wie schreibt mock für Strukturen in Go

Ich möchte schreiben Sie einen unit-test für die Hire - Funktion, die verlangen, dass die Verspottung CarFactory und Car Strukturen. Siehe den folgenden code:

package main

type Car struct {
    Name string
}

func (h Car) Run() { ... }

type CarFactory struct {}

func (e CarFactory) MakeCar() Car {
    return Car{}
}

func Transport(cf CarFactory) {
    ...
    car := cf.MakeCar()
    car.Run()
    ...
}

In anderen OOP-Sprachen wie Java, C# oder C++, ich kann nur definieren CarFactoryMock und CarMock erweitern CarFactory und Car dann überschreiben MakeCar() - Methode zum zurückgeben einer CarMock Objekt

class CarMock extends Car {
    public Run() {...}
}

class CarFactoryMock extends CarFactory {
    public Car MakeCar() { return new CarMock(); }                                                                                                                                                                                        
}

Transport(new CarFactoryMock())

Wie kann ich erreichen, das in Go?

Beachten Sie, dass ich ändern kann, Prototyp-und source-code von Transport Funktion, aber halten muss CarFactory und Car die gleiche, da Sie aus einem 3. Paket


Den letzten code-snippet war über die Menschliche und Mitarbeiter, die zu Verwirrung führen`.

  • Warum verspotten Employee? Warum verspotten Human? Nur bauen ein und Zeug ein echter Mitarbeiter in Hire und testen was passiert. Btw: Du code smells, wie Sie versucht, das zu tun, Vererbung basierten OOP in Gehen. Tun Sie das nicht, werden Sie sich verletzen.
  • Weil Mitarbeiter und Human nennen können 3rd-party-API, welche eine Internetverbindung. Ich will laufen meine unit-test offline.
  • Gut, dann tun Sie das richtige und machen Sie Ihre Drittanbieter-API-Aufruf konfigurierbar und leiten diese Aufrufe von Fälschungen während der Prüfung. Nicht jeder OOP-best-practice-ist wirklich praktisch und am besten, vor allem im Gehen.
  • Ich kann nicht touch der 3. Bibliothek und ich weiß nicht, wo ist der Endpunkt, was ist der urls, ..., die 3rd-party-also die BESTE Praxis hier ist ein fake, nicht für die Reale.
InformationsquelleAutor thanhpk | 2016-12-09
Schreibe einen Kommentar