/// <summary> /// Sets up FromSqlRaw invocations containing a specified sql string and parameters to return a specified result. /// </summary> /// <typeparam name="T">The queryable source type.</typeparam> /// <param name="mockedQueryProvider">The mocked query provider.</param> /// <param name="sql">The FromSqlRaw sql string. Set up supports case insensitive partial matches.</param> /// <param name="parameters">The FromSqlRaw parameters. Set up supports case insensitive partial parameter sequence matching.</param> /// <param name="fromSqlResult">The sequence to return when FromSqlRaw is invoked.</param> /// <returns>The mocked query provider.</returns> public static IQueryProvider AddFromSqlRawResult <T>(this IQueryProvider mockedQueryProvider, string sql, IEnumerable <object> parameters, IEnumerable <T> fromSqlResult) where T : class { EnsureArgument.IsNotNull(mockedQueryProvider, nameof(mockedQueryProvider)); EnsureArgument.IsNotNull(sql, nameof(sql)); EnsureArgument.IsNotNull(parameters, nameof(parameters)); EnsureArgument.IsNotNull(fromSqlResult, nameof(fromSqlResult)); Logger.LogDebug("Setting up '{sql}'", sql); var createQueryResult = new AsyncEnumerable <T>(fromSqlResult); mockedQueryProvider.Configure() .CreateQuery <T>(Arg.Is <FromSqlQueryRootExpression>(fsqre => ProjectExpressionHelper.SqlAndParametersMatchFromSqlExpression(sql, parameters, fsqre))) .Returns(callInfo => { ProjectExpressionHelper.ThrowIfExpressionIsNotSupported(callInfo.Arg <Expression>()); var fsqre = (FromSqlQueryRootExpression)callInfo.Arg <Expression>(); var parts = new List <string>(); parts.Add("FromSql inputs:"); parts.Add(ProjectExpressionHelper.StringifyFromSqlExpression(fsqre)); Logger.LogDebug(string.Join(Environment.NewLine, parts)); return(createQueryResult); }); return(mockedQueryProvider); }