为了账号安全,请及时绑定邮箱和手机立即绑定

在测试中覆盖接收器类型,并将依赖关系注入到逻辑中

在测试中覆盖接收器类型,并将依赖关系注入到逻辑中

Go
叮当猫咪 2022-08-01 18:06:14
使用 ,我正在尝试执行以下操作:Go v1.14.3package mainimport (    "os"    "github.com/mihaigalos/go-bar/bar")var progressBar bar.Barfunc (*ProgressHandler) New(begin int, end int) {    progressBar.New(begin, end)}func main() {    var progressHandler ProgressHandler    send(&progressHandler)}目前为止,一切都好。但是当我测试时,我不需要看到任何进度条,因此我的进度手柄可以是空的,并且我想依赖 - 将此对象注入到.里面它会调用我指定的.send()New()package mainimport (    "testing")func (*ProgressHandler) New(int, int) {}func TestSendWorks_whenTypical(t *testing.T) {    expected := true    var progressHandler ProgressHandler    actual := send(&progressHandler)    if actual != expected {        t.Errorf("No Match: %b != %b", actual, expected)    }}当我编译这个时,我得到了一个名称冲突与中定义的处理程序:mainintegration_typical_test.go:23:25: (*ProgressHandler).New redeclared in this block    previous declaration at main.go:15:6我尝试将包的名称更改为其他名称。那里有同样的错误。我该如何改进?
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超8个赞

使用接口。


type ProgressBar interface {

    New(int, int)

}


var progressBar bar.Bar


// New implements ProgressBar

func (*ProgressHandler) New(begin int, end int) {

    progressBar.New(begin, end)

}


// change *ProgressHandler to ProgressBar

func send(pb ProgressBar) {

    // ...

}


func main() {

    var progressHandler ProgressHandler

    send(&progressHandler)

}

package main


import (

    "testing"

)


type fakeProgressHandler struct{}


func (*fakeProgressHandler) New(int, int) {

}


func TestSendWorks_whenTypical(t *testing.T) {

    expected := true

    var progressHandler fakeProgressHandler


    actual := send(&progressHandler)


    if actual != expected {

        t.Errorf("No Match: %b != %b", actual, expected)

    }

}

处理程序中的接收器。nil


package main


import (

    "os"


    "github.com/mihaigalos/go-bar/bar"

)


var progressBar bar.Bar


func (h *ProgressHandler) New(begin int, end int) {

    if h == nil {

        return

    }

    progressBar.New(begin, end)

}


func main() {

    var progressHandler ProgressHandler

    send(&progressHandler)

}

package main


import (

    "testing"

)


func TestSendWorks_whenTypical(t *testing.T) {

    expected := true


    actual := send(nil)


    if actual != expected {

        t.Errorf("No Match: %b != %b", actual, expected)

    }

}


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号