【问题标题】:Can you derive an action using Generics for use with TypeMock WhenCalled您可以使用泛型派生一个动作以与 TypeMock WhenCalled 一起使用吗
【发布时间】:2014-12-03 06:30:54
【问题描述】:

我已经编写了一个扩展方法助手,用于将假数据加载到 DbContext 中

public static void RegisterFakeData<T>(this DbContext databaseContext, ObjectSet<T> action,   IEnumerable<T> fakeData) where T : class
{
    Isolate.WhenCalled(() => action).WillReturnCollectionValuesOf(fakeData.AsQueryable());
}

这可以按预期工作,但我想知道是否可以从假数据的类型中派生正在传入的 dbcontext 上的属性(操作参数)。

因此,如果我要设置 Customer 属性,我只需传入一个客户列表。

当前使用情况:

Isolate.Fake.StaticConstructor<DbContext>();
var databaseContext = Isolate.Fake.Instance<DbContext>();

databaseContext.RegisterFakeData(databaseContext.Customer, new List<Customer> { new Customer { CustID = "cust1", RegionCode = "region1"}})

所需用途:

databaseContext.RegisterFakeData(new List<Customer> { new Customer { CustID = "cust1", RegionCode = "region1"}})

【问题讨论】:

    标签: c# generics typemock-isolator


    【解决方案1】:

    我是 Typemock 的 Bar。

    因为我们不伪造任何反射方法,您可以使用此解决方法:

    public void RegisterFakeData<T> (Context ctx,IEnumerable<T> list)
            {
                var name =typeof (T).Name;
                var mi = ctx.GetType().GetProperty(name).GetGetMethod();
                var args = new object[0] ;
                Isolate.WhenCalled(() =>(IEnumerable<T>)mi.Invoke(ctx,args)).WillReturnCollectionValuesOf(list);
            }
    

    【讨论】:

    • 我发现这种情况不起作用。如果上下文在带有 .ToList() 的 linq 查询中使用,那么它可以正常工作,但如果 linq 查询正在访问查询中的上下文属性,那么它会引发空异常。非常接近,但我不想不必要地使用 .ToList() 。即: var member = (from customer in _databaseContext.Customer where customer.CustID == blah select customer) 抛出异常。更改为 _databaseContext.Customer.ToList() 并且它可以工作,但这并不好。
    【解决方案2】:

    你可以使用 AsQueryable() :

    Isolate.WhenCalled(() => (IEnumerable<T>)mi.Invoke(ctx,args)).WillReturnCollectionValuesOf
    (list.AsQueryable());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2020-11-23
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多