Added function 'IsMethodCallable', which checking that the method can be called.

pull/900/head
Ogoyukin 2020-02-14 15:13:13 +09:00 committed by Boyan Soubachov
parent 3ebf1ddaeb
commit 42aafee8d7
2 changed files with 60 additions and 0 deletions

View File

@ -527,6 +527,38 @@ func (m *Mock) AssertNotCalled(t TestingT, methodName string, arguments ...inter
return true
}
// IsMethodCallable checking that the method can be called.
// Is returned bool val
func (m *Mock) IsMethodCallable(t TestingT, methodName string, arguments ...interface{}) bool {
if h, ok := t.(tHelper); ok {
h.Helper()
}
m.mutex.Lock()
defer m.mutex.Unlock()
for _, v := range m.ExpectedCalls {
if v.Method != methodName {
continue
}
if len(arguments) != len(v.Arguments) {
continue
}
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 {
return true
}
}
return false
}
func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool {
for _, call := range m.calls() {
if call.Method == methodName {

View File

@ -1143,6 +1143,34 @@ func Test_Mock_AssertNotCalled(t *testing.T) {
}
func Test_Mock_IsMethodCallable(t *testing.T) {
var mockedService = new(TestExampleImplementation)
mockedService.On("Test_Mock_IsMethodCallable", 1, 5).Return(5, 5).Twice()
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1))
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1, 6))
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 2, 5))
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1, int64(5)))
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_Check", 1, 5))
assert.True(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1, 5))
mockedService.MethodCalled("Test_Mock_IsMethodCallable", 1, 5)
assert.True(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1, 5))
mockedService.MethodCalled("Test_Mock_IsMethodCallable", 1, 5)
assert.False(t, mockedService.IsMethodCallable(t, "Test_Mock_IsMethodCallable", 1, 5))
arr := Call{Repeatability: 1}
mockedService.On("Function", arr).Return(true).Twice()
assert.True(t, mockedService.IsMethodCallable(t, "Function", arr))
mockedService.MethodCalled("Function", arr)
assert.True(t, mockedService.IsMethodCallable(t, "Function", arr))
mockedService.MethodCalled("Function", arr)
assert.False(t, mockedService.IsMethodCallable(t, "Function", arr))
}
func Test_Mock_AssertOptional(t *testing.T) {
// Optional called
var ms1 = new(TestExampleImplementation)