private static void thatBetweenThrownExceptionIfCalledMoreThanAtMostNumberOfTimesWithMatchers()
        {
            // Given
            fflib_ApexMocks mocks    = new fflib_ApexMocks();
            fflib_MyList    mockList = (fflib_MyList)mocks.mock(typeof(fflib_MyList));

            // When
            mockList.add("bob");
            mockList.add("fred");
            mockList.add("bob");
            mockList.add("fred");
            mockList.add("fred");
            mockList.add("fred");

            // Then
            try
            {
                ((fflib_MyList.IList)mocks.verify(mockList, mocks.between(3, 5))).add(fflib_Match.anyString());
                System.assert(false, "an exception was expected because we are asserting that the method is called 5 times when instead is called six times");
            }
            catch (fflib_ApexMocks.ApexMocksException ex)
            {
                string expectedMessage = "Expected : 5 or fewer times, Actual: 6 -- Wanted but not invoked: " + fflib_MyList.getStubClassName() + ".add(String).";
                string actualMessage   = ex.getMessage();
                System.assertEquals(expectedMessage, actualMessage,
                                    "the exception has been caught as expected, however the message is not as expected");
            }
        }
        private static void thatVerifiesBetweenNumberOfTimesWithMatchers()
        {
            // Given
            fflib_ApexMocks mocks    = new fflib_ApexMocks();
            fflib_MyList    mockList = (fflib_MyList)mocks.mock(typeof(fflib_MyList));

            // When
            mockList.add("bob");
            mockList.add("fred");
            mockList.add("fred");
            mockList.add("bob");

            // Then
            ((fflib_MyList.IList)mocks.verify(mockList, mocks.between(3, 5))).add(fflib_Match.anyString());
        }