如何使用testify为无入参无返回值的函数编写Mock实现?
使用Testify Mock实现无入参无返回值方法的正确方式
我正在对一段使用某接口的代码进行单元测试,该接口包含一个无入参、无返回值的方法。请问使用testify的mock包,编写该方法Mock实现的正确方式是什么?我当前的写法如下:
type A struct { mock.Mock } func (a *A) DoSomething() { _ = a.Called(nil) }
你的写法存在问题:Called(nil)会把nil当作一个参数传入,而原方法是无入参的,这会导致后续设置调用期望时出现不匹配的情况。
正确的写法是直接调用a.Called(),不需要传递任何参数——因为Called()接受可变参数,无入参场景下不传参数即可:
type A struct { mock.Mock } func (a *A) DoSomething() { a.Called() // 无入参时直接调用,无需传nil }
在测试代码中,你可以这样设置和验证期望:
func TestYourLogic(t *testing.T) { mockObj := new(A) // 设置期望:DoSomething方法被调用一次 mockObj.On("DoSomething").Once() // 执行被测试的业务逻辑(这里会触发mockObj.DoSomething()) // 验证所有期望是否都被满足 mockObj.AssertExpectations(t) }
内容的提问来源于stack exchange,提问作者akalpaki
相关产品推荐
相关产品推荐

