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)
- 1 回答
- 0 關注
- 107 瀏覽
添加回答
舉報
0/150
提交
取消
