在传递正确的参数时为模拟的失败断言作证

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


富国沪深
浏览 69回答 1
1回答

潇潇雨雨

您实际上是在拨打电话之前打电话。因此,您尝试在调用该方法之前检查模拟的方法调用。m.AssertExpectation(t)r.Calculate(m)只需将断言放在后面,它应该没问题。r.Calculate(m)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go