How to use CallPatternCreator class of Telerik.JustMock.Core package

Best JustMockLite code snippet using Telerik.JustMock.Core.CallPatternCreator

MocksRepository.cs

Source:MocksRepository.cs Github

copy

Full Screen

...641            using (this.sharedContext.StartArrange())642            {643                result.Repository = this;644                result.ArrangementExpression = ExpressionUtil.ConvertMockExpressionToString(expression);645                result.CallPattern = CallPatternCreator.FromExpression(this, expression);646                AddArrange(result);647            }648#if !PORTABLE649            var createInstanceLambda = ActivatorCreateInstanceTBehavior.TryCreateArrangementExpression(result.CallPattern.Method);650            if (createInstanceLambda != null)651            {652                var createInstanceMethodMock = Arrange(createInstanceLambda, methodMockFactory);653                ActivatorCreateInstanceTBehavior.Attach(result, createInstanceMethodMock);654            }655#endif656            return result;657        }658        /// <summary>659        /// Since we are not able to record deffered execution, check whether mock is about to present660        /// IQueryable<> or IEnumerable<>. If it so, then throw an exception to prompt the user to use661        /// Mock.Arrange overloads with expressions.662        /// See also https://stackoverflow.com/questions/3894490/linq-what-is-the-quickest-way-to-find-out-deferred-execution-or-not663        /// </summary>664        /// <typeparam name="TMethodMock">Mock return type</typeparam>665        /// <param name="methodMockFactory">Mock factory</param>666        private void CheckDefferedExecutionTypes<TMethodMock>(Func<TMethodMock> methodMockFactory)667        {668            var mockFactoryType = methodMockFactory.GetType().GetGenericArguments().FirstOrDefault();669            if (mockFactoryType.IsGenericType && mockFactoryType.GetGenericTypeDefinition() == typeof(FuncExpectation<>))670            {671                var mockFactoryGenericArguments = mockFactoryType.GetGenericArguments();672                if (mockFactoryGenericArguments673                        .Where(a => a.IsGenericType)674                        .Where(a => a.GetGenericTypeDefinition() == typeof(IQueryable<>)675                            || a.GetGenericTypeDefinition() == typeof(IEnumerable<>))676                        .Any())677                {678                    throw new MockException("Cannot arrange action with potential deffered execution, use Mock.Arrange with expressions instead.");679                }680            }681        }682        [ArrangeMethod]683        internal TMethodMock Arrange<TMethodMock>(Action memberAction, Func<TMethodMock> methodMockFactory)684            where TMethodMock : IMethodMock685        {686            using (this.sharedContext.StartArrange())687            {688                var result = methodMockFactory();689                CheckDefferedExecutionTypes(methodMockFactory);690                result.Repository = this;691                result.CallPattern = CallPatternCreator.FromAction(this, memberAction);692                AddArrange(result);693                return result;694            }695        }696        [ArrangeMethod]697        internal TMethodMock Arrange<TMethodMock>(object instance, MethodBase method, object[] arguments, Func<TMethodMock> methodMockFactory)698            where TMethodMock : IMethodMock699        {700            using (this.sharedContext.StartArrange())701            {702                var result = methodMockFactory();703                result.Repository = this;704                result.CallPattern = CallPatternCreator.FromMethodBase(this, instance, method, arguments);705                AddArrange(result);706                return result;707            }708        }709        [ArrangeMethod]710        internal TMethodMock Arrange<TMethodMock>(CallPattern callPattern, Func<TMethodMock> methodMockFactory)711            where TMethodMock : IMethodMock712        {713            using (this.sharedContext.StartArrange())714            {715                var result = methodMockFactory();716                result.Repository = this;717                result.CallPattern = callPattern;718                AddArrange(result);719                return result;720            }721        }722        private void AssertBehaviorsForMocks(IEnumerable<IMethodMock> mocks, bool ignoreMethodMockOccurrences)723        {724            foreach (var methodMock in mocks)725            {726                bool occurrenceAsserted = ignoreMethodMockOccurrences;727                if (!ignoreMethodMockOccurrences728                    && !methodMock.OccurencesBehavior.LowerBound.HasValue729                    && !methodMock.OccurencesBehavior.UpperBound.HasValue)730                {731                    methodMock.OccurencesBehavior.Assert(1, null);732                    occurrenceAsserted = true;733                }734                foreach (var behavior in methodMock.Behaviors.OfType<IAssertableBehavior>())735                    if (!occurrenceAsserted || behavior != methodMock.OccurencesBehavior)736                        behavior.Assert();737            }738        }739        internal void AssertAll(string message, object mock)740        {741            using (MockingContext.BeginFailureAggregation(message))742            {743                var mocks = GetMethodMocksFromObject(mock);744                AssertBehaviorsForMocks(mocks.Select(m => m.MethodMock), false);745            }746        }747        internal void AssertAll(string message)748        {749            using (MockingContext.BeginFailureAggregation(message))750            {751                var mocks = GetAllMethodMocks();752                AssertBehaviorsForMocks(mocks.Select(m => m.MethodMock), false);753            }754        }755        internal void Assert(string message, object mock, Expression expr = null, Args args = null, Occurs occurs = null)756        {757            using (MockingContext.BeginFailureAggregation(message))758            {759                if (expr == null)760                {761                    List<IMethodMock> mocks = new List<IMethodMock>();762                    mocks.AddRange(GetMethodMocksFromObject(mock).Select(m => m.MethodMock));763                    foreach (var methodMock in mocks)764                    {765                        foreach (var behavior in methodMock.Behaviors.OfType<IAssertableBehavior>())766                            behavior.Assert();767                    }768                    MockingUtil.UnwrapDelegateTarget(ref mock);769                    var mockMixin = GetMockMixin(mock, null);770                    if (mockMixin != null)771                    {772                        foreach (var behavior in mockMixin.FallbackBehaviors.OfType<IAssertableBehavior>()773                            .Concat(mockMixin.SupplementaryBehaviors.OfType<IAssertableBehavior>()))774                            behavior.Assert();775                    }776                }777                else778                {779                    CallPattern callPattern = CallPatternCreator.FromExpression(this, expr);780                    AssertForCallPattern(callPattern, args, occurs);781                }782            }783        }784        internal void AssertAction(string message, Action memberAction, Args args = null, Occurs occurs = null)785        {786            using (MockingContext.BeginFailureAggregation(message))787            {788                CallPattern callPattern = CallPatternCreator.FromAction(this, memberAction);789                AssertForCallPattern(callPattern, args, occurs);790            }791        }792        internal void AssertSetAction(string message, Action memberAction, Args args = null, Occurs occurs = null)793        {794            using (MockingContext.BeginFailureAggregation(message))795            {796                using (this.sharedContext.StartAssertSet())797                {798                    CallPattern callPattern = CallPatternCreator.FromAction(this, memberAction, true);799                    AssertForCallPattern(callPattern, args, occurs);800                }801            }802        }803        internal void AssertMethodInfo(string message, object instance, MethodBase method, object[] arguments, Occurs occurs)804        {805            using (MockingContext.BeginFailureAggregation(message))806            {807                CallPattern callPattern = CallPatternCreator.FromMethodBase(instance, method, arguments);808                AssertForCallPattern(callPattern, null, occurs);809            }810        }811        internal void AssertIgnoreInstance(string message, Type type, bool ignoreMethodMockOccurrences)812        {813            using (MockingContext.BeginFailureAggregation(message))814            {815                var methodMocks = GetMethodMocksFromObject(null, type);816                AssertBehaviorsForMocks(methodMocks.Select(m => m.MethodMock), ignoreMethodMockOccurrences);817            }818        }819        internal int GetTimesCalled(Expression expression, Args args)820        {821            CallPattern callPattern = CallPatternCreator.FromExpression(this, expression);822            int callsCount;823            CountMethodMockInvocations(callPattern, args, out callsCount);824            return callsCount;825        }826        internal int GetTimesCalledFromAction(Action action, Args args)827        {828            var callPattern = CallPatternCreator.FromAction(this, action);829            int callsCount;830            CountMethodMockInvocations(callPattern, args, out callsCount);831            return callsCount;832        }833        internal int GetTimesCalledFromMethodInfo(object instance, MethodBase method, object[] arguments)834        {835            var callPattern = CallPatternCreator.FromMethodBase(instance, method, arguments);836            int callsCount;837            CountMethodMockInvocations(callPattern, null, out callsCount);838            return callsCount;839        }840        private HashSet<IMethodMock> CountMethodMockInvocations(CallPattern callPattern, Args args, out int callsCount)841        {842            if (callPattern.IsDerivedFromObjectEquals)843                throw new MockException("Cannot assert calls to methods derived from Object.Equals");844            PreserveRefOutValuesBehavior.ReplaceRefOutArgsWithAnyMatcher(callPattern);845            if (args != null)846            {847                if (args.Filter != null)848                {849                    if (args.IsIgnored == null)850                    {851                        args.IsIgnored = true;852                    }853                    if (!callPattern.Method.IsStatic854                        && args.IsInstanceIgnored == null855                        && args.Filter.Method.GetParameters().Length == callPattern.Method.GetParameters().Length + 1)856                    {857                        args.IsInstanceIgnored = true;858                    }859                }860                if (args.IsIgnored == true)861                {862                    for (int i = 0; i < callPattern.ArgumentMatchers.Count; i++)863                        callPattern.ArgumentMatchers[i] = new AnyMatcher();864                }865                if (args.IsInstanceIgnored == true)866                {867                    callPattern.InstanceMatcher = new AnyMatcher();868                }869                callPattern.Filter = args.Filter;870            }871            MethodInfoMatcherTreeNode root;872            callsCount = 0;873            var mocks = new HashSet<IMethodMock>();874            var method = callPattern.Method;875            if (invocationTreeRoots.TryGetValue(method, out root))876            {877                var occurences = root.GetOccurences(callPattern);878                callsCount = occurences.Select(x => x.Calls).Sum();879                foreach (var mock in occurences.SelectMany(x => x.Mocks))880                {881                    mocks.Add(mock);882                }883            }884            return mocks;885        }886        private void AssertForCallPattern(CallPattern callPattern, Args args, Occurs occurs)887        {888            int callsCount;889            var mocks = CountMethodMockInvocations(callPattern, args, out callsCount);890            if (occurs != null)891            {892                InvocationOccurrenceBehavior.Assert(occurs.LowerBound, occurs.UpperBound, callsCount, null, null);893            }894            if (mocks.Count == 0)895            {896                MethodInfoMatcherTreeNode funcRoot;897                if (arrangementTreeRoots.TryGetValue(callPattern.Method, out funcRoot))898                {899                    var arranges = funcRoot.GetAllMethodMocks(callPattern);900                    foreach (var arrange in arranges)901                    {902                        mocks.Add(arrange.MethodMock);903                    }904                }905            }906            if (occurs == null && mocks.Count == 0)907            {908                InvocationOccurrenceBehavior.Assert(Occurs.AtLeastOnce().LowerBound, Occurs.AtLeastOnce().UpperBound, callsCount, null, null);909            }910            else911            {912                AssertBehaviorsForMocks(mocks, occurs != null);913            }914        }915        internal MethodBase GetMethodFromCallPattern(CallPattern callPattern)916        {917            var method = callPattern.Method as MethodInfo;918            if (method == null || !method.IsVirtual)919                return callPattern.Method;920            method = method.NormalizeComInterfaceMethod();921            var valueMatcher = callPattern.InstanceMatcher as IValueMatcher;922            if (valueMatcher != null && valueMatcher.Value != null)923            {924                var valueType = valueMatcher.Value.GetType();925                var mockMixin = GetMockMixin(valueMatcher.Value, null);926                var type = mockMixin != null ? mockMixin.DeclaringType : valueType;927                if (!type.IsInterface && method.DeclaringType.IsAssignableFrom(type))928                {929                    var concreteMethod = MockingUtil.GetConcreteImplementer(method, type);930                    if (!concreteMethod.IsInheritable() && !ProfilerInterceptor.IsProfilerAttached)931                    {932                        var reimplementedInterfaceMethod = (MethodInfo)method.GetInheritanceChain().Last();933                        if (reimplementedInterfaceMethod.DeclaringType.IsInterface934                            && mockFactory.IsAccessible(reimplementedInterfaceMethod.DeclaringType))935                        {936                            concreteMethod = reimplementedInterfaceMethod;937                        }938                    }939                    method = concreteMethod;940                }941            }942            if (method.DeclaringType != method.ReflectedType)943                method = (MethodInfo)MethodBase.GetMethodFromHandle(method.MethodHandle, method.DeclaringType.TypeHandle);944            return method;945        }946        /// <summary>947        /// Converts the given object to a matcher as follows. This method is most useful for948        /// creating a matcher out of an argument expression.949        /// 950        /// It works as follows:951        /// If the object is not an expression, then a value matcher for that object is returned.952        /// If the object is an expression then:953        /// * if the top of the expression is a method call expression and the member954        ///     has the ArgMatcherAttribute then the specific matcher type is instantiaded955        ///     with the parameters passed to the method call expression and returned.956        ///     If the matcher type is generic, then it is defined with the type of the expression.957        /// * if the top expression is a member or method call and the member958        ///     has the ArgIgnoreAttribute, then a TypeMatcher is returned959        /// * otherwise, the expression is evaluated and a ValueMatcher is returned960        /// </summary>961        /// <param name="argumentObj"></param>962        /// <returns></returns>963        internal static IMatcher CreateMatcherForArgument(object argumentObj)964        {965            var argExpr = argumentObj as Expression;966            if (argExpr == null)967            {968                return new ValueMatcher(argumentObj);969            }970            else971            {972                var argMatcher = TryCreateMatcherFromArgMember(argExpr);973                if (argMatcher != null)974                {975                    return argMatcher;976                }977                else978                {979                    //no matcher, evaluate the original expression980                    var argValue = argExpr.EvaluateExpression();981                    return new ValueMatcher(argValue);982                }983            }984        }985        internal static IMatcher TryCreateMatcherFromArgMember(Expression argExpr)986        {987            // The expression may end with a conversion which erases the type of the required matcher.988            // Remove the conversion before working with matchers989            while (argExpr.NodeType == ExpressionType.Convert)990                argExpr = ((UnaryExpression)argExpr).Operand;991            ArgMatcherAttribute argAttribute = null;992            Expression[] matcherArguments = null;993            if (argExpr is MethodCallExpression)994            {995                var methodCall = (MethodCallExpression)argExpr;996                argAttribute = (ArgMatcherAttribute)Attribute.GetCustomAttribute(methodCall.Method, typeof(ArgMatcherAttribute));997                matcherArguments = methodCall.Arguments.ToArray();998            }999            else if (argExpr is MemberExpression)1000            {1001                var memberExpr = (MemberExpression)argExpr;1002                argAttribute = (ArgMatcherAttribute)Attribute.GetCustomAttribute(memberExpr.Member, typeof(ArgMatcherAttribute));1003            }1004            if (argAttribute != null)1005            {1006                if (argAttribute.GetType() == typeof(ArgIgnoreAttribute))1007                {1008                    return new TypeMatcher(argExpr.Type);1009                }1010                else if (argAttribute.GetType() == typeof(ArgIgnoreTypeAttribute))1011                {1012                    var func = Expression.Lambda(argExpr).Compile();1013                    var funcResult = func.DynamicInvoke();1014                    return new TypeMatcher(funcResult.GetType());1015                }1016                else if (argAttribute.GetType() == typeof(RefArgAttribute) || argAttribute.GetType() == typeof(OutArgAttribute))1017                {1018                    var asMemberExpr = argExpr as MemberExpression;1019                    if (asMemberExpr != null)1020                    {1021                        argExpr = asMemberExpr.Expression;1022                    }1023                    var refCall = (MethodCallExpression)argExpr;1024                    var actualArg = refCall.Arguments[0];1025                    var memberExpr = actualArg as MemberExpression;1026                    if (memberExpr != null && typeof(Expression).IsAssignableFrom(memberExpr.Type) && memberExpr.Expression.Type.DeclaringType == typeof(ArgExpr))1027                    {1028                        actualArg = (Expression)actualArg.EvaluateExpression();1029                    }1030                    var argMatcher = CreateMatcherForArgument(actualArg);1031                    argMatcher.ProtectRefOut = argAttribute.GetType() == typeof(RefArgAttribute);1032                    return argMatcher;1033                }1034                else1035                {1036                    var matcherType = argAttribute.Matcher;1037                    var matcherArgs = argAttribute.MatcherArgs;1038                    if (matcherType.IsGenericTypeDefinition)1039                        matcherType = matcherType.MakeGenericType(argExpr.Type);1040                    if (matcherArgs == null && matcherArguments != null)1041                        matcherArgs = matcherArguments.Select(matcherArgExpr => matcherArgExpr.EvaluateExpression()).ToArray();1042                    var matcher = (IMatcher)MockingUtil.CreateInstance(matcherType, matcherArgs);1043                    return matcher;1044                }1045            }1046            else1047            {1048                return null;1049            }1050        }1051        private void AddArrange(IMethodMock methodMock)1052        {1053            var method = methodMock.CallPattern.Method;1054            if (methodMock.CallPattern.IsDerivedFromObjectEquals && method.ReflectedType.IsValueType())1055                throw new MockException("Cannot mock Equals method because JustMock depends on it. Also, when Equals is called internally by JustMock, all methods called by it will not be intercepted and will have only their original implementations called.");1056            CheckMethodInterceptorAvailable(methodMock.CallPattern.InstanceMatcher, method);1057            Type declaringType = method.DeclaringType;1058            // If we're arranging a call to a mock object, overwrite its repository.1059            // This will ensure correct behavior when a mock object is arranged1060            // in multiple contexts.1061            var refMatcher = methodMock.CallPattern.InstanceMatcher as ReferenceMatcher;1062            if (refMatcher != null)1063            {1064                var value = refMatcher.Value;1065                var mock = GetMockMixin(value, declaringType);1066                if (mock != null)1067                {1068                    methodMock.Mock = mock;1069                    mock.Repository = this;1070                }1071                if (value != null)1072                    EnableInterception(value.GetType());1073            }1074            EnableInterception(declaringType);1075            PreserveRefOutValuesBehavior.Attach(methodMock);1076            ConstructorMockBehavior.Attach(methodMock);1077            MethodInfoMatcherTreeNode funcRoot;1078            if (!arrangementTreeRoots.TryGetValue(method, out funcRoot))1079            {1080                funcRoot = new MethodInfoMatcherTreeNode(method);1081                arrangementTreeRoots.Add(method, funcRoot);1082            }1083            funcRoot.AddChild(methodMock.CallPattern, methodMock, this.sharedContext.GetNextArrangeId());1084#if !PORTABLE1085            if (ProfilerInterceptor.IsReJitEnabled)1086            {1087                CallPattern.CheckMethodCompatibility(method);1088                CallPattern.CheckInstrumentationAvailability(method);1089                ProfilerInterceptor.RequestReJit(method);1090            }1091            try1092            {1093                if (MockingContext.Plugins.Exists<IDebugWindowPlugin>())1094                {1095                    var debugWindowPlugin = MockingContext.Plugins.Get<IDebugWindowPlugin>();1096                    var argumentMatchers =1097                        methodMock.CallPattern.ArgumentMatchers1098                            .SelectMany(1099                                (IMatcher matcher, int index) =>1100                                    {1101                                        MatcherInfo[] paramsMatchers;1102                                        var matcherInfo = MatcherInfo.FromMatcherAndParamInfo(matcher, methodMock.CallPattern.Method.GetParameters()[index], out paramsMatchers);1103                                        if (matcherInfo.Kind == MatcherInfo.MatcherKind.Params && paramsMatchers.Length > 0)1104                                        {1105                                            // skip params matcher, but add all contained matchers1106                                            return paramsMatchers;1107                                        }1108                                        return new MatcherInfo[] { matcherInfo };1109                                    },1110                                (IMatcher matcher, MatcherInfo resultMatcherInfo) => resultMatcherInfo)1111                            .ToArray();1112                    debugWindowPlugin.MockCreated(1113                        methodMock.Repository.RepositoryId,1114                        methodMock.Repository.GetRepositoryPath(),1115                        MockInfo.FromMethodBase(methodMock.CallPattern.Method),1116                        argumentMatchers);1117                }1118            }1119            catch (Exception e)1120            {1121                System.Diagnostics.Trace.WriteLine("Exception thrown calling IDebugWindowPlugin plugin: " + e);1122            }1123#endif1124        }1125#if !PORTABLE1126        internal void UpdateMockDebugView(MethodBase method, IMatcher[] argumentMatchers)1127        {1128            try1129            {1130                if (MockingContext.Plugins.Exists<IDebugWindowPlugin>())1131                {1132                    var debugWindowPlugin = MockingContext.Plugins.Get<IDebugWindowPlugin>();1133                    MatcherInfo[] argumentMatcherInfos = null;1134                    if (argumentMatchers != null)1135                    {1136                        argumentMatcherInfos =1137                            argumentMatchers.Select(1138                                (IMatcher matcher, int index) =>1139                                    {1140                                        MatcherInfo[] dummy;1141                                        return MatcherInfo.FromMatcherAndParamInfo(matcher, method.GetParameters()[index], out dummy);1142                                    })1143                            .ToArray();1144                    }1145                    debugWindowPlugin.MockUpdated(1146                        this.RepositoryId,1147                        this.GetRepositoryPath(),1148                        MockInfo.FromMethodBase(method),1149                        argumentMatcherInfos);1150                }1151            }1152            catch (Exception e)1153            {1154                System.Diagnostics.Trace.WriteLine("Exception thrown calling IDebugWindowPlugin plugin: " + e);1155            }1156        }1157#endif1158        private void CheckMethodInterceptorAvailable(IMatcher instanceMatcher, MethodBase method)1159        {1160            if (ProfilerInterceptor.IsProfilerAttached)1161                return;1162            var valueMatcher = instanceMatcher as IValueMatcher;1163            if (valueMatcher == null)1164                return;1165            var instance = valueMatcher.Value;1166            if (instance == null)1167                return;1168            if (MockingProxy.CanIntercept(instance, method))1169                return;1170            if (!(instance is IMockMixin) || !method.IsInheritable())1171                ProfilerInterceptor.ThrowElevatedMockingException(method);1172        }1173#if !PORTABLE1174        private void RequestRejitForTypeMethods(Type typeToIntercept)1175        {1176            var methods = new HashSet<MethodBase>();1177            methods.UnionWith(typeToIntercept.GetMethods(MockingUtil.AllMembers));1178            methods.UnionWith(1179                typeToIntercept.GetInheritanceChain()1180                    .Where(type => type != typeToIntercept)1181                    .SelectMany(type => type.GetMethods(MockingUtil.AllMembers | BindingFlags.DeclaredOnly))1182                    .Where(method => !method.IsAbstract && method.DeclaringType != typeof(object)));1183            methods.UnionWith(1184                MockingUtil.GetAllProperties(typeToIntercept)1185                    .SelectMany(1186                        property =>1187                            {1188                                var propertyMethods = new List<MethodBase>();1189                                var getMethod = property.GetMethod;1190                                if (getMethod != null)1191                                {1192                                    propertyMethods.Add(getMethod);1193                                }1194                                var setMethod = property.SetMethod;1195                                if (setMethod != null)1196                                {1197                                    propertyMethods.Add(setMethod);1198                                }1199                                return propertyMethods;1200                            }));1201            foreach (var method in methods)1202            {1203                try1204                {1205                    CallPattern.CheckMethodCompatibility(method);1206                    CallPattern.CheckInstrumentationAvailability(method);1207                    ProfilerInterceptor.RequestReJit(method);1208                }1209                catch (MockException e)1210                {1211#if DEBUG1212                    System.Diagnostics.Trace.WriteLine(string.Format("Method {0} is skipped for interception: {1}", method, e));1213#endif1214                }1215            }1216        }1217#endif1218        internal void EnableInterception(Type typeToIntercept)1219        {1220            if (ProfilerInterceptor.IsProfilerAttached)1221            {1222                for (var type = typeToIntercept; type != null;)1223                {1224                    if (!ProfilerInterceptor.TypeSupportsInstrumentation(type))1225                        DebugView.TraceEvent(IndentLevel.Warning, () => String.Format("Elevated mocking for type {0} will not be available due to limitations in CLR", type));1226                    if (this.arrangedTypes.Add(type))1227                    {1228                        ProfilerInterceptor.EnableInterception(type, true, this);1229#if !PORTABLE1230                        if (ProfilerInterceptor.IsReJitEnabled && type == typeToIntercept)1231                        {1232                            RequestRejitForTypeMethods(type);1233                        }1234#endif1235                    }1236                    type = type.BaseType;1237                    if (type == typeof(object) || type == typeof(ValueType) || type == typeof(Enum))1238                        break;1239                }1240                using (this.sharedContext.StartRunClassConstructor())1241                {1242                    var handle = typeToIntercept.TypeHandle;1243                    this.disabledTypes.Add(typeof(RuntimeHelpers));1244                    ProfilerInterceptor.RunClassConstructor(handle);1245                    this.disabledTypes.Remove(typeof(RuntimeHelpers));1246                }1247            }1248        }1249        internal void DisableInterception(Type typeToIntercept)1250        {1251            if (ProfilerInterceptor.IsProfilerAttached)1252            {1253                if (this.arrangedTypes.Remove(typeToIntercept))1254                {1255                    ProfilerInterceptor.EnableInterception(typeToIntercept, false, this);1256                }1257                this.disabledTypes.Add(typeToIntercept);1258            }1259        }1260        private List<MethodMockMatcherTreeNode> GetMethodMocksFromObject(object mock, Type mockType = null)1261        {1262            MockingUtil.UnwrapDelegateTarget(ref mock);1263            var methodMocks = new List<MethodMockMatcherTreeNode>();1264            var visitedMocks = new List<object>(); // can't be HashSet because we can't depend on GetHashCode being implemented properly1265            GetMethodMocksFromObjectInternal(mock, mockType, methodMocks, visitedMocks);1266            return methodMocks;1267        }1268        private void GetMethodMocksFromObjectInternal(object mock, Type mockType, List<MethodMockMatcherTreeNode> methodMocks, List<object> visitedMocks)1269        {1270            if (visitedMocks.Contains(mock))1271                return;1272            visitedMocks.Add(mock);1273            IMatcher instanceMatcher;1274            Func<MethodInfoMatcherTreeNode, bool> rootMatcher;1275            if (mockType != null)1276            {1277                instanceMatcher = new AnyMatcher();1278                rootMatcher = node => mockType.IsAssignableFrom(node.MethodInfo.DeclaringType);1279            }1280            else1281            {1282                instanceMatcher = new ValueMatcher(mock);1283                rootMatcher = node =>1284                {1285                    foreach (var child in node.Children)1286                    {1287                        if (child.Matcher.Matches(instanceMatcher))1288                        {1289                            return true;1290                        }1291                    }1292                    return false;1293                };1294            }1295            foreach (var funcRoot in arrangementTreeRoots.Values.Where(rootMatcher))1296            {1297                var callPattern = CallPattern.CreateUniversalCallPattern(funcRoot.MethodInfo);1298                callPattern.InstanceMatcher = instanceMatcher;1299                var results = funcRoot.GetAllMethodMocks(callPattern);1300                methodMocks.AddRange(results);1301            }1302            if (mock != null)1303            {1304                var mockMixin = GetMockMixin(mock, null);1305                if (mockMixin != null)1306                {1307                    foreach (var dependentMock in mockMixin.DependentMocks)1308                        GetMethodMocksFromObjectInternal(dependentMock, null, methodMocks, visitedMocks);1309                }1310            }1311        }1312        private List<MethodMockMatcherTreeNode> GetAllMethodMocks()1313        {1314            var methodMocks = new List<MethodMockMatcherTreeNode>();1315            GetAllMethodMocksInternal(methodMocks);1316            return methodMocks;1317        }1318        private void GetAllMethodMocksInternal(List<MethodMockMatcherTreeNode> methodMocks)1319        {1320            foreach (var funcRoot in arrangementTreeRoots.Values)1321            {1322                var callPattern = CallPattern.CreateUniversalCallPattern(funcRoot.MethodInfo);1323                var results = funcRoot.GetAllMethodMocks(callPattern);1324                methodMocks.AddRange(results);1325            }1326        }1327        private bool DispatchInvocationToMethodMocks(Invocation invocation)1328        {1329            CallPattern callPattern = CallPatternCreator.FromInvocation(invocation);1330            MethodInfoMatcherTreeNode funcRoot = null;1331            if (!invocation.InArrange && !invocation.InAssertSet)1332            {1333                if (!invocationTreeRoots.TryGetValue(callPattern.Method, out funcRoot))1334                {1335                    funcRoot = new MethodInfoMatcherTreeNode(callPattern.Method);1336                    invocationTreeRoots.Add(callPattern.Method, funcRoot);1337                }1338            }1339            var methodMock = DispatchInvocationToArrangements(callPattern, invocation);1340            if (!invocation.InArrange && !invocation.InAssertSet)1341            {1342                funcRoot.AddOrUpdateOccurence(callPattern, methodMock);1343            }...

Full Screen

Full Screen

CallPatternCreator.cs

Source:CallPatternCreator.cs Github

copy

Full Screen

...20using Telerik.JustMock.Core.MatcherTree;21using Telerik.JustMock.Core.Recording;22namespace Telerik.JustMock.Core23{24    internal class CallPatternCreator25    {26        internal static CallPattern FromExpression(MocksRepository repository, Expression expr)27        {28            var callPattern = new CallPattern();29            expr = ((LambdaExpression)expr).Body;30            // the expression may end with a boxing conversion, remove that31            while (expr.NodeType == ExpressionType.Convert)32                expr = ((UnaryExpression)expr).Operand;33            Expression target;34            MethodBase method = null;35            Expression[] args;36            // We're parsing either a property/field expression or a method call.37            // parse the top of the expression tree and extract the expressions38            // that will turn into the constituents of the call pattern....

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using Telerik.JustMock.Helpers;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8{9    {10        public void Method1()11        {12            var mock = Mock.Create<Class2>();13            Mock.Arrange(() => mock.Method2()).Returns(1);14            Mock.Arrange(() => mock.Method3()).Returns(2);15            Mock.Arrange(() => mock.Method4()).Returns(3);16            Mock.Arrange(() => mock.Method5()).Returns(4);17            Mock.Arrange(() => mock.Method6()).Returns(5);18            Mock.Arrange(() => mock.Method7()).Returns(6);19            Mock.Arrange(() => mock.Method8()).Returns(7);20            Mock.Arrange(() => mock.Method9()).Returns(8);21            Mock.Arrange(() => mock.Method10()).Returns(9);22            Mock.Arrange(() => mock.Method11()).Returns(10);23            Mock.Arrange(() => mock.Method12()).Returns(11);24            Mock.Arrange(() => mock.Method13()).Returns(12);25            Mock.Arrange(() => mock.Method14()).Returns(13);26            Mock.Arrange(() => mock.Method15()).Returns(14);27            Mock.Arrange(() => mock.Method16()).Returns(15);28            Mock.Arrange(() => mock.Method17()).Returns(16);29            Mock.Arrange(() => mock.Method18()).Returns(17);30            Mock.Arrange(() => mock.Method19()).Returns(18);31            Mock.Arrange(() => mock.Method20()).Returns(19);32            Mock.Arrange(() => mock.Method21()).Returns(20);33            Mock.Arrange(() => mock.Method22()).Returns(21);34            Mock.Arrange(() => mock.Method23()).Returns(22);35            Mock.Arrange(() => mock.Method24()).Returns(23);36            Mock.Arrange(() => mock.Method25()).Returns(24);37            Mock.Arrange(() => mock.Method26()).Returns(25);38            Mock.Arrange(() => mock.Method27()).Returns(26);39            Mock.Arrange(() => mock.Method28()).Returns(27);40            Mock.Arrange(() => mock.Method29()).Returns(28);41            Mock.Arrange(() => mock.Method30()).Returns(

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using Telerik.JustMock.Helpers;3using System;4using System.Collections.Generic;5using System.Linq;6using System.Text;7using System.Threading.Tasks;8using System.IO;9{10    {11        public static void CreateCallPattern()12        {13            var mock = Mock.Create<Stream>();14            Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);15            mock.Read(new byte[0], 0, 0);16            Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>()), Occurs.Once());17        }18    }19}20using Telerik.JustMock;21using System;22using System.Collections.Generic;23using System.Linq;24using System.Text;25using System.Threading.Tasks;26using System.IO;27{28    {29        public static void CreateCallPattern()30        {31            var mock = Mock.Create<Stream>();32            Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);33            mock.Read(new byte[0], 0, 0);34            Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>()), Occurs.Once());35        }36    }37}38using Telerik.JustMock;39using System;40using System.Collections.Generic;41using System.Linq;42using System.Text;43using System.Threading.Tasks;44using System.IO;45{46    {47        public static void CreateCallPattern()48        {49            var mock = Mock.Create<Stream>();50            Mock.Arrange(() => mock.Read(Arg.IsAny<byte[]>(), Arg.IsAny<int>(), Arg.IsAny<int>())).Returns(0);51            mock.Read(new byte[0], 0, 0);52            Mock.Assert(() => mock.Read(Arg.IsAny<byte[]>(), Arg

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2using Telerik.JustMock.Helpers;3using Telerik.JustMock;4using System;5using System.Collections.Generic;6using System.Linq;7using System.Text;8using System.Threading.Tasks;9{10    {11        public string GetFoo()12        {13            return "foo";14        }15    }16}17using Telerik.JustMock.Core;18using Telerik.JustMock.Helpers;19using Telerik.JustMock;20using System;21using System.Collections.Generic;22using System.Linq;23using System.Text;24using System.Threading.Tasks;25{26    {27        public string GetFoo()28        {29            return "foo";30        }31    }32}33using Telerik.JustMock.Core;34using Telerik.JustMock.Helpers;35using Telerik.JustMock;36using System;37using System.Collections.Generic;38using System.Linq;39using System.Text;40using System.Threading.Tasks;41{42    {43        public string GetFoo()44        {45            return "foo";46        }47    }48}49using Telerik.JustMock.Core;50using Telerik.JustMock.Helpers;51using Telerik.JustMock;52using System;53using System.Collections.Generic;54using System.Linq;55using System.Text;56using System.Threading.Tasks;57{58    {59        public string GetFoo()60        {61            return "foo";62        }63    }64}65using Telerik.JustMock.Core;66using Telerik.JustMock.Helpers;67using Telerik.JustMock;68using System;69using System.Collections.Generic;70using System.Linq;71using System.Text;72using System.Threading.Tasks;73{74    {75        public string GetFoo()76        {77            return "foo";78        }79    }80}81using Telerik.JustMock.Core;82using Telerik.JustMock.Helpers;

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock;2using System;3{4    {5        public static void Main()6        {7            var mock = Mock.Create<IFoo>();8            Mock.Arrange(() => mock.Bar(Arg.AnyString, Arg.AnyInt)).CallOriginal();9            var result = mock.Bar("test", 1);10            Console.WriteLine(result);11        }12    }13    {14        string Bar(string s, int i);15    }16}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2public void TestMethod1()3{4    var mock = Mock.Create<IClass1>();5    Mock.Arrange(() => mock.Func1(Arg.IsAny<string>(), Arg.IsAny<int>())).Returns("test").MustBeCalled();6    Mock.Arrange(() => mock.Func2(Arg.IsAny<string>(), Arg.IsAny<int>())).MustBeCalled();7    var test = new Class2(mock);8    test.Func3("test", 1);9}10{11    private readonly IClass1 _class1;12    public Class2(IClass1 class1)13    {14        _class1 = class1;15    }16    public void Func3(string str, int i)17    {18        _class1.Func1(str, i);19        _class1.Func2(str, i);20    }21}22{23    string Func1(string str, int i);24    string Func2(string str, int i);25}26using Telerik.JustMock.Core;27public void TestMethod2()28{29    var mock = Mock.Create<IClass1>();30    Mock.Arrange(() => mock.Func1(Arg.IsAny<string>(), Arg.IsAny<int>())).Returns("test").MustBeCalled();31    Mock.Arrange(() => mock.Func2(Arg.IsAny<string>(), Arg.IsAny<int>())).MustBeCalled();32    var test = new Class2(mock);33    test.Func3("test", 1);34}35{36    private readonly IClass1 _class1;37    public Class2(IClass1 class1)38    {39        _class1 = class1;40    }41    public void Func3(string str, int i)42    {43        _class1.Func1(str, i);44        _class1.Func2(str, i);45    }46}47{48    string Func1(string str, int i);49    string Func2(string str, int i);50}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2using Telerik.JustMock.Helpers;3{4    {5        public virtual string Method1()6        {7            return "Hello World";8        }9    }10}11using Telerik.JustMock.Core;12using Telerik.JustMock.Helpers;13{14    {15        public virtual string Method1()16        {17            return "Hello World";18        }19    }20}21using Telerik.JustMock.Core;22using Telerik.JustMock.Helpers;23{24    {25        public virtual string Method1()26        {27            return "Hello World";28        }29    }30}31using Telerik.JustMock.Core;32using Telerik.JustMock.Helpers;33{34    {35        public virtual string Method1()36        {37            return "Hello World";38        }39    }40}41using Telerik.JustMock.Core;42using Telerik.JustMock.Helpers;43{44    {45        public virtual string Method1()46        {47            return "Hello World";48        }49    }50}51using Telerik.JustMock.Core;52using Telerik.JustMock.Helpers;53{54    {55        public virtual string Method1()56        {57            return "Hello World";58        }59    }60}61using Telerik.JustMock.Core;62using Telerik.JustMock.Helpers;63{64    {65        public virtual string Method1()66        {67            return "Hello World";68        }69    }70}

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1using Telerik.JustMock.Core;2{3    {4        public bool TestMethod()5        {6            var mock = Mock.Create<ISample>();7            var result = CallPatternCreator.Create(() => mock.Method1());8            var result2 = CallPatternCreator.Create(() => mock.Method2());9            var result3 = CallPatternCreator.Create(() => mock.Method3());10            var result4 = CallPatternCreator.Create(() => mock.Method4());11            var result5 = CallPatternCreator.Create(() => mock.Method5());12            var result6 = CallPatternCreator.Create(() => mock.Method6());13            var result7 = CallPatternCreator.Create(() => mock.Method7());14            var result8 = CallPatternCreator.Create(() => mock.Method8());15            var result9 = CallPatternCreator.Create(() => mock.Method9());16            var result10 = CallPatternCreator.Create(() => mock.Method10());17            var result11 = CallPatternCreator.Create(() => mock.Method11());18            var result12 = CallPatternCreator.Create(() => mock.Method12());19            var result13 = CallPatternCreator.Create(() => mock.Method13());20            var result14 = CallPatternCreator.Create(() => mock.Method14());21            var result15 = CallPatternCreator.Create(() => mock.Method15());22            var result16 = CallPatternCreator.Create(() => mock.Method16());23            var result17 = CallPatternCreator.Create(() => mock.Method17());24            var result18 = CallPatternCreator.Create(() => mock.Method18());25            var result19 = CallPatternCreator.Create(() => mock.Method19());26            var result20 = CallPatternCreator.Create(() => mock.Method20());27            var result21 = CallPatternCreator.Create(() => mock.Method21());28            var result22 = CallPatternCreator.Create(() => mock.Method22());29            var result23 = CallPatternCreator.Create(() => mock.Method23());30            var result24 = CallPatternCreator.Create(() => mock.Method24());31            var result25 = CallPatternCreator.Create(() => mock.Method25());32            var result26 = CallPatternCreator.Create(() => mock.Method26());33            var result27 = CallPatternCreator.Create(() => mock.Method27());34            var result28 = CallPatternCreator.Create(() => mock.Method28());35            var result29 = CallPatternCreator.Create(() => mock.Method29());

Full Screen

Full Screen

CallPatternCreator

Using AI Code Generation

copy

Full Screen

1var logMock = CallPatternCreator.Mock<ILog>();2var sut = new ClassUnderTest(logMock);3sut.DoSomething();4Assert.AreEqual(1, logMock.InfoCallCount);5Assert.AreEqual("Info", logMock.InfoCalls[0].Arguments[0]);6Assert.AreEqual("Something happened", logMock.InfoCalls[0].Arguments[1]);

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run JustMockLite automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful