我有一个接口,其中包含很多子方法。
type InterfaceCheckout interface {
GetID() int
GetItems() []InterfaceCartItem
// ... then like 30more methods
}
我有一个只使用GetItems方法的方法。
func GetRates(checkoutI InterfaceCheckout) []Rate {
for _, item := range checkoutI.GetItesm() {
p := item.GetProduct()
}
}
我希望能够测试GetRates
方法而无需模拟InterfaceCheckout
中的所有方法。
我原以为我可以:
- create some smaller interfaces that specify only the methods I'm making use of
- cast the input as this new interface
pass through to a new internal method
func GetRates(checkoutI InterfaceCheckout) []Rate { getRates(checkoutWrapper(checkoutI)) } func getRates(checkoutI checkoutWrapper) []Rate { for _, item := range checkoutI.GetItesm() { p := item.GetProduct() } } // smaller wrapper interfaces type checkoutWrapper interface { GetItems() []InterfaceCartItem }
GetItems
返回的InterfaceCartItem
接口列出了约30个方法,而我只使用其中一个GetProduct
。因此,我认为我可以使用相同的解决方案,并创建一个仅包含我需要的一个方法的接口,但是当我尝试更改从checkoutWrapper@GetItems()
返回的类型时,golang会说checkoutI
不再满足checkoutWrapper
接口,因为它返回与GetItems
不同的类型,这在技术上是正确的...我尝试过的代码如下:
func GetRates(checkoutI InterfaceCheckout) []Rate {
getRates(checkoutWrapper(checkoutI))
}
func getRates(checkoutI InterfaceCheckout) []Rate {
for _, item := range checkoutI.GetItesm() {
p := item.GetProduct()
}
}
// smaller wrapper interfaces
type checkoutWrapper interface {
GetItems() []itemWrapper
}
type itemWrapper interface {
GetProduct() InterfaceProduct
}
所以接口方法验证只进行一层深度吗?
GetProduct
返回一个接口? - Will CInterfaceProduct
->Producter
。 - T. Claverie