Go 接口嵌套组合的使用方法 & gomock 测试 stub 代码生成

Posted 禅与计算机程序设计艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 接口嵌套组合的使用方法 & gomock 测试 stub 代码生成相关的知识,希望对你有一定的参考价值。

Go 接口嵌套组合的使用方法

package rocket

import (
    "code.byted.org/ecom/compass_data_index/driver"
    "code.byted.org/ecom/compass_data_index/service"
)

type IRocketFetcher interface 
    service.BasicInfoService
    driver.INavigatorDriver


type RocketFetcher struct 
    service.BasicInfoService
    driver.INavigatorDriver


func NewRocketFetcher() *RocketFetcher 
    return &RocketFetcher
        &service.BasicInfoServiceImpl,
        &driver.NavigatorDriver,
    

gomock 测试 stub 代码生成

使用 -aux_files 指定内嵌接口的 pkg1=path1,pkg2=path2. 需要注意的是, pkg1 / pkg2 不能跟被测接口的包相同!
(may be mockgen's assumptions!)

-aux_files rocket=service/basic_info_service.go,rocket=driver/navigator_driver.go

一个 Makefile 的例子:

PROJECTNAME=$(shell basename "$(PWD)")
all: format test

format:
    find . -name '*.go' | xargs goimports -w

test:
    go test -v -cover ./...

#test report
test_report:
    go test -v -cover -json ./...  | go-test-report -t "Test Report"



#gomock
mockgen_navigator_driver:
    mockgen -source=./driver/navigator_driver.go -destination ./driver/navigator_driver_mock.go -package driver

mockgen_rocket_fetcher:
    mockgen -source=./rocket/rocket_driver.go -destination ./rocket/rocket_driver_mock.go -package rocket -aux_files rocket=service/basic_info_service.go,rocket=driver/navigator_driver.go

mockgen_basic_info_service:
    mockgen -source=./service/basic_info_service.go -destination ./service/basic_info_service_mock.go -package service

以上是关于Go 接口嵌套组合的使用方法 & gomock 测试 stub 代码生成的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Go语言中的结构体struct & 接口Interface & 反射

golang结构体组合与“多态” 2021-08-06

go继承

Go Lang 帮助 - 访问接口的数组/切片

go结构,结构嵌套,接口,指针的测试和结论

接口——嵌套,接口和类型间的转换,空接口类型,类型分支