public IArrangement GetArrangement(IInvocation invocation)
        {
            var proxy            = invocation.Proxy;
            var proxyIdentifier  = GetProxyIdentifier(proxy);
            var metadataToken    = invocation.Method.MetadataToken;
            var memberName       = invocation.GetFriendlyMemberName();
            var arrangementCount = GetArrangementCallsMade(proxyIdentifier, metadataToken);
            var invocationCount  = GetInvocationCallsMade(proxyIdentifier, metadataToken);

            if (_arrangementQueue.ContainsKey(proxyIdentifier))
            {
                if (_arrangementQueue[proxyIdentifier].ContainsKey(metadataToken))
                {
                    var arrangementQueue = _arrangementQueue[proxyIdentifier][metadataToken];

                    if (arrangementQueue.TryDequeue(out var arrangement))
                    {
                        return(arrangement);
                    }
                }
            }

            var mockExceptionMessage = _mockFailureMessageFactory.GetUnarrangedInvocationFailureMessage(memberName, arrangementCount, invocationCount);

            throw new MockException(mockExceptionMessage);
        }