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

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

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

Go
富国沪深 2022-08-24 20:31:57
Golang初学者在这里。我正在尝试为我的结构编写测试,最终模拟统计接口。就测试而言,我的代码的相关部分如下所示。// Test codetype 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
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

只需将断言放在后面,它应该没问题。r.Calculate(m)


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信