【发布时间】:2023-08-21 12:17:01
【问题描述】:
我想为Transport 函数编写一个单元测试,这将需要模拟CarFactory 和Car 结构。见以下代码:
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()
...
}
在 Java、C# 或 C++ 等其他 OOP 语言中,我可以定义扩展 CarFactory 和 Car 的 CarFactoryMock 和 CarMock 然后覆盖 MakeCar() 方法以返回 CarMock 对象
class CarMock extends Car {
public Run() {...}
}
class CarFactoryMock extends CarFactory {
public Car MakeCar() { return new CarMock(); }
}
Transport(new CarFactoryMock())
如何在 Go 中实现这一点?
请注意,我可以更改 Transport 函数的原型和源代码,但必须保持 CarFactory 和 Car 相同,因为它们来自第三个包
最后一个代码sn-p是关于Human和Employee的,导致混淆`。
【问题讨论】:
标签: unit-testing go mocking