Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当调用TypeMock时,是否可以使用泛型派生操作_C#_Generics_Typemock Isolator - Fatal编程技术网

C# 当调用TypeMock时,是否可以使用泛型派生操作

C# 当调用TypeMock时,是否可以使用泛型派生操作,c#,generics,typemock-isolator,C#,Generics,Typemock Isolator,我已经编写了一个扩展方法助手,用于将伪数据加载到DbContext中 public static void RegisterFakeData<T>(this DbContext databaseContext, ObjectSet<T> action, IEnumerable<T> fakeData) where T : class { Isolate.WhenCalled(() => action).WillReturnCollection

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

public static void RegisterFakeData<T>(this DbContext databaseContext, ObjectSet<T> action,   IEnumerable<T> fakeData) where T : class
{
    Isolate.WhenCalled(() => action).WillReturnCollectionValuesOf(fakeData.AsQueryable());
}
public static void RegisterFakeData(此DbContext databaseContext、ObjectSet操作、IEnumerable fakeData),其中T:class
{
当调用(()=>操作)时,隔离.WillReturnCollectionValuesOf(fakeData.AsQueryable());
}
这可以按预期工作,但我想知道是否可以从伪数据的类型派生传入的dbcontext(action参数)的属性

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

当前使用情况:

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

databaseContext.RegisterFakeData(databaseContext.Customer, new List<Customer> { new Customer { CustID = "cust1", RegionCode = "region1"}})
Isolate.false.StaticConstructor();
var databaseContext=Isolate.false.Instance();
databaseContext.registerMakedata(databaseContext.Customer,新列表{new Customer{CustID=“cust1”,RegionCode=“region1”})
预期用途:

databaseContext.RegisterFakeData(new List<Customer> { new Customer { CustID = "cust1", RegionCode = "region1"}})
databaseContext.registerMakedata(新列表{new Customer{CustID=“cust1”,RegionCode=“region1”})

我是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);
        }
public void RegisterFakeData(上下文ctx,IEnumerable列表)
{
变量名称=类型(T)。名称;
var mi=ctx.GetType().GetProperty(名称).getMethod();
var args=新对象[0];
孤立.WhenCalled(()=>(IEnumerable)mi.Invoke(ctx,args)).WillReturnCollectionValuesOf(列表);
}
您可以使用AsQueryable():

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

我发现这样做不起作用。如果在带有.ToList()的linq查询中使用上下文,那么它可以正常工作,但是如果linq查询正在访问查询中的上下文属性,那么它会抛出null异常。非常接近,但我不想不必要地使用.ToList()。ie:var member=(来自_databaseContext.customer中的customer,其中customer.CustID==blah select customer)引发异常。更改为_databaseContext.Customer.ToList(),它可以工作,但这并不好。
Isolate.WhenCalled(() => (IEnumerable<T>)mi.Invoke(ctx,args)).WillReturnCollectionValuesOf
(list.AsQueryable());