登录
首页 >  Golang >  Go问答

验证模拟失败断言的正确参数传递

来源:stackoverflow

时间:2024-02-23 13:36:27 317浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《验证模拟失败断言的正确参数传递》,聊聊,我们一起来看看吧!

问题内容

golang 初学者在这里。我正在尝试为我的结构编写测试,最终模拟统计接口。就测试而言,我的代码的相关部分如下所示。

// test code
type mockstats struct {
    mock.mock
}

func (m *mockstats) mean(input []float64) (mean float64, err error) {
    args := m.called(input)
    return (args.get(0)).(float64), args.error(1)
}

func testcalculatewhenerrorcalculatingmean(t *testing.t) {

    m := new(mockstats)

    data := []float64{0.0, 0.1}
    r := responseaggregate{executiontimes: data}

    // expectations
    m.on("mean", []float64{0.0, 0.1}).return(float64(0.1), errors.new("oops!")).once()
    m.assertexpectations(t)

    // function call

    err := r.calculate(m)

    // data assertion
    assert.notnil(t, err)
    if assert.error(t, err) {
        assert.equal(t, errors.new("error calculating average. oops!"), err)
    }

}

我的调用代码看起来像

type responseaggregate struct {
    executiontimes             []float64
    averagetime                float64
}


func (response *responseaggregate) calculate(stats stats) error {

    average, err := stats.mean(response.executiontimes)
    if err != nil {
        return fmt.errorf("error calculating average. %v", err)
    }

    return nil

当我运行测试时,出现错误

The code you are testing needs to make 1 more call(s).

你能帮我解决我在这里缺少的东西吗?谢谢。顺便说一句,使用 go 1.16.3


正确答案


您实际上是在调用 r.Calculate(m) 之前调用 m.AssertExpectation(t) 。因此,您尝试在调用方法之前检查模拟方法调用。

只需将断言放在 r.Calculate(m) 之后就可以了。

好了,本文到此结束,带大家了解了《验证模拟失败断言的正确参数传递》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>