在传递正确的参数时证明模拟的失败断言
Testify failing assertion for mocks when passing the correct args
这里是 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 初学者。我正在尝试为我的结构编写测试,最终模拟出统计接口。就测试而言,我的代码的相关部分如下所示。
// 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)
之后就可以了。