You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jun 27, 2023. It is now read-only.
Mocking a method with int and string parameters generates a mock that does not expect those types. However, if both parameters are of type string, it works properly.
output
alem@alem-vm:~/Workspace/go/src/alem/test1$ go test lib_test.go
--- FAIL: TestMyThing (0.00s)
controller.go:113: no matching expected call: *mock_mypackage.MockMyInterface.SomeMethod([1 second])
controller.go:158: missing call(s) to *mock_mypackage.MockMyInterface.SomeMethod(is equal to 1, is equal to second)
controller.go:165: aborting test due to missing call(s)
FAIL
FAIL command-line-arguments 0.002s
lib.go
package mypackage
type MyInterface interface {
SomeMethod(x uint64, y string)
}
Numeric types in Go are distinct types. An int is not the same as a uint64. When your test writes mockObj.EXPECT().SomeMethod(1, "second") then the 1 becomes a int (since the expectation methods take interface{} args to support matchers), and int(1) is not uint64(1).
Write mockObj.EXPECT().SomeMethod(uint64(1), "second") instead and it should work fine.
Why do not generate mock that expects int64 instead of interface{} ?
It should be easy, because you already generates real types for Mock object, but not for MockRecorder.
Is there any reason you could not allow int64 and other specific types?
It could be a flag for mockgen finally.
Mocking a method with int and string parameters generates a mock that does not expect those types. However, if both parameters are of type string, it works properly.
output
lib.go
lib_test.go
mockgen
The text was updated successfully, but these errors were encountered: