【问题标题】:Testify failing assertion for mocks when passing the correct args在传递正确的参数时证明模拟的断言失败
【发布时间】:2021-05-01 18:00:42
【问题描述】:

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

【问题讨论】:

    标签: go testify


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多