通过 stretchr/testify 模拟,不同的 return args
Mocking via stretchr/testify, different return args
下面的函数描述了如何使用 testify 进行模拟。 args.Bool(0)
、args.Error(1)
是模拟位置 return 值。
func (m *MyMockedObject) DoSomething(number int) (bool, error) {
args := m.Called(number)
return args.Bool(0), args.Error(1)
}
除了args.Int()
、args.Bool()
、args.String()
之外,是否可以return?如果我需要 return int64
或自定义 struct
怎么办?有什么方法还是我遗漏了什么?
例如:
func (m *someMock) doStuff(p *sql.DB, id int) (res int64, err error)
是的,可以使用 args.Get
和类型断言。
来自docs:
// For objects of your own type, use the generic Arguments.Get(index) method and make a type assertion:
//
// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine)
因此,您的示例将是:
func (m *someMock) doStuff(p *sql.DB, id int) (res int64, err error) {
args := m.Called(p, id)
return args.Get(0).(int64), args.Error(1)
}
此外,如果您的 return 值是一个指针(例如指向结构的指针),您应该在执行类型断言之前检查它是否为 nil。
下面的函数描述了如何使用 testify 进行模拟。 args.Bool(0)
、args.Error(1)
是模拟位置 return 值。
func (m *MyMockedObject) DoSomething(number int) (bool, error) {
args := m.Called(number)
return args.Bool(0), args.Error(1)
}
除了args.Int()
、args.Bool()
、args.String()
之外,是否可以return?如果我需要 return int64
或自定义 struct
怎么办?有什么方法还是我遗漏了什么?
例如:
func (m *someMock) doStuff(p *sql.DB, id int) (res int64, err error)
是的,可以使用 args.Get
和类型断言。
来自docs:
// For objects of your own type, use the generic Arguments.Get(index) method and make a type assertion:
//
// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine)
因此,您的示例将是:
func (m *someMock) doStuff(p *sql.DB, id int) (res int64, err error) {
args := m.Called(p, id)
return args.Get(0).(int64), args.Error(1)
}
此外,如果您的 return 值是一个指针(例如指向结构的指针),您应该在执行类型断言之前检查它是否为 nil。