diff --git a/mock/mock.go b/mock/mock.go index 36de508..eeed9d5 100644 --- a/mock/mock.go +++ b/mock/mock.go @@ -545,20 +545,27 @@ func (m *Mock) IsMethodCallable(t TestingT, methodName string, arguments ...inte if v.Repeatability < v.totalCalls { continue } - var argsEqual = true - for i, arg := range v.Arguments { - if !reflect.DeepEqual(arguments[i], arg) { - argsEqual = false - continue - } - } - if argsEqual { + if isArgsEqual(v.Arguments, arguments) { return true } } return false } +func isArgsEqual(expected Arguments, args []interface{}) bool { + if len(args) != len(args) { + return false + } + var argsEqual = true + for i, v := range args { + if !reflect.DeepEqual(expected[i], v) { + argsEqual = false + continue + } + } + return argsEqual +} + func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool { for _, call := range m.calls() { if call.Method == methodName { diff --git a/mock/mock_test.go b/mock/mock_test.go index 8c3bbd2..f6b4cc3 100644 --- a/mock/mock_test.go +++ b/mock/mock_test.go @@ -1171,6 +1171,22 @@ func Test_Mock_IsMethodCallable(t *testing.T) { assert.False(t, mockedService.IsMethodCallable(t, "Function", arr)) } +func TestIsArgsEqual(t *testing.T) { + var expected = Arguments{5, 3, 4, 6, 7, 2} + var args = make([]interface{}, 6) + for i := 0; i < len(expected); i++ { + args[i] = expected[i] + } + args[2] = expected[1] + assert.False(t, isArgsEqual(expected, args)) + + var arr = make([]interface{}, 6) + for i := 0; i < len(expected); i++ { + arr[i] = expected[i] + } + assert.True(t, isArgsEqual(expected, arr)) +} + func Test_Mock_AssertOptional(t *testing.T) { // Optional called var ms1 = new(TestExampleImplementation)