On 05/04/2017 18:06, Jonathan Yu wrote:
Hi everyone,

I've been using gomock to generate mock objects (in source mode), and it's been pretty great - way better than maintaining similar code on my own. One thing that I find curious, though, is that expectations are recorded using
a generic interface{} type, rather than the original type.

For example, in the sample mock_user.go
<https://github.com/golang/mock/blob/master/sample/mock_user/mock_user.go>
file, we have:

func (_m *MockIndex) Anon(_param0 string) {
_m.ctrl.Call(_m, "Anon", _param0)
}

func (_mr *_MockIndexRecorder) Anon(arg0 interface{}) *gomock.Call {
return _mr.mock.ctrl.RecordCall(_mr.mock, "Anon", arg0)
}

Does anyone know why the Recorder interface is generated with interface{}?
Doesn't this mean that we lose type safety when defining expectations?
After all, you can do: mock.EXPECT().Anon(123) even though the method must
be called with a string parameter, right?

Because you _don't_ have to use a value of the appropriate type when setting up the expectations, e.g.:

"mock.EXPECT().Anon(gmock.Any())" or "mock.EXPECT().Anon(gomock.Not("invalid"))"

in fact "mock.EXPECT().Anon("123")" is actually a shortcut for "mock.EXPECT.Anon(gomock.Eq("123"))"

(see https://godoc.org/github.com/golang/mock/gomock#Matcher)

HTH,

--
Julian

--
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to