Recently, we’ve been mocking out IQueryable’s as return values, which had led to setups that look like the following…

programs
    .setup_result_for(x => x.All())
    .Return(new List<IProgram> {active_program,inactive_program}.AsQueryable());

I just switched over to the following syntax… by creating an extension method.

programs
    .setup_result_for(x => x.All())
    .will_return(active_program, inactive_program);

The following are the extensions methods to make this work.

public static IMethodOptions<IEnumerable<R>> will_return<R>(this IMethodOptions<IEnumerable<R>> options, params R[] items)
  {
      return options.Return(items);
  }

  public static IMethodOptions<IQueryable<R>> will_return<R>(this IMethodOptions<IQueryable<R>> options, params R[] items)
  {
      return options.Return(new Query<R>(items));
  }

and…

internal classQuery<T> : IQueryable<T> 
  { 
     private readonly IQueryable<T> query; 
  
   public Query(params T[] items) 
   { 
     query = items.AsQueryable(); 
   } 
  
   public Expression Expression 
   { 
     get { return query.Expression; } 
   } 
  
   public Type ElementType 
   { 
     get { return query.ElementType; } 
   } 
  
   public IQueryProvider Provider 
   { 
     get { return query.Provider; } 
   } 
  
   public IEnumerator<T> GetEnumerator() 
   { 
     return query.GetEnumerator(); 
   } 
  
   IEnumerator IEnumerable.GetEnumerator() 
   { 
     return GetEnumerator(); 
   } 
  }

Hope, this helps!

comments powered by Disqus