CarFactory
とCar
の構造体をモックする必要があるHire
関数の単体テストを書いてみたいと思います。 CarMock
オブジェクトGoで構造体のモックを書くには
class CarMock extends Car {
public Run() {...}
}
class CarFactoryMock extends CarFactory {
public Car MakeCar() { return new CarMock(); }
}
Transport(new CarFactoryMock())
を返すように
MakeCar()
メソッドをオーバーライドし、その後
CarFactory
と
Car
を拡張することに、私はちょうど
CarFactoryMock
と
CarMock
を定義することができますにするJava、C#やC++のような他のOOP言語では
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()
...
}
:次のコードを参照してください。
Goでこれをどのように達成できますか?
私はTransport
関数のプロトタイプとソースコードを変更することができますが、それらは第三のパッケージから取られているので、同じCarFactory
とCar
を維持する必要があります
最後のコードスニペットは、ヒトについてだったと従業員、混乱につながる。
なぜモック 'Employee'のですか?なぜ人間?実際の従業員を「雇用」に組み込み、何が起こるかをテストするだけです。Btw:あなたは、GoでOOPベースの継承をしようとしたような臭いがあります。しないでください、あなたは自分自身を傷つけるでしょう。 – Volker
従業員と人間はインターネット接続が必要な第三者APIを呼び出す可能性があるためです。ユニットテストをオフラインで実行したい – thanhpk
さて、正しいことをして、サードパーティのAPIコールを設定可能にし、テスト中にこれらの呼び出しを偽物にリダイレクトします。すべてのOOPベストプラクティスが実際には実用的ではなく、特にGoで最高です。 – Volker