Testify mock正在返回断言该函数尚未被调用

问题描述 投票:0回答:1

我的测试仍然失败,但no actual calls happened但我肯定func被调用(这是一个日志功能,所以我看到终端上的日志)

基本上我的代码看起来像这样:

common/utils.go


func LogNilValue(ctx string){
    log.Logger.Warn(ctx)
}

main.go


import (
"common/utils"
)

func CheckFunc(*string value) {
    ctx := "Some context string"
    if value == nil {
    utils.LogNilValue(ctx) //void func that just logs the string
   }
}

test.go


type MyMockedObject struct{
    mock.Mock
}

func TestNil() {
    m := new(MyMockedObject)
    m.Mock.On("LogNilValue", mock.Anything).Return(nil)
    CheckFunc(nil)
    m.AssertCalled(s.T(), "LogNilValue", mock.Anything)
}

我希望这可行,但随后,我不断得到no actual calls happened。不知道我在这里做错了什么。

go mocking testify
1个回答
0
投票

LogNilValue应该有MyMockedObject作为方法接收器,以模拟方法。像这样的东西

func (*MyMockedObject)LogNilValue(ctx string) {
    log.Logger.Warn(ctx)
}

CheckFunc应该是这样的:

func CheckFunc(value *string, m *MyMockedObject) {
    ctx := "Some context string"
    if value == nil {
        m.LogNilValue(ctx) //void func that just logs the string
   }
}

最后是TestNil方法:

func TestNil() {
    m := new(MyMockedObject)
    m.Mock.On("LogNilValue", mock.Anything).Return(nil)
    CheckFunc(nil, m)
    m.AssertCalled(s.T(), "LogNilValue", mock.Anything)
}
© www.soinside.com 2019 - 2024. All rights reserved.