내 생각 :
var genericType = baseType.MakeGenericType(iDbSet.PropertyType.GetGenericArguments()[0]);
문제가에 의해
var genericType = baseType.MakeGenericType(iDbSet.PropertyType);
을 대체
public static void AddFakeDbSets<T>(this Mock<T> obj) where T : class
{
var iDbSets = typeof(T).GetProperties().Where(p =>
p.PropertyType.IsGenericType == true &&
p.PropertyType.GetGenericTypeDefinition().Name.StartsWith("IDbSet"));
Type baseType = typeof(FakeDbSet<>);
foreach (var iDbSet in iDbSets)
{
if (iDbSet.GetValue(obj.Object) == null)
{
var genericType = baseType.MakeGenericType(iDbSet.PropertyType);
var concreteObject = Activator.CreateInstance(genericType);
iDbSet.SetValue(obj.Object, concreteObject);
}
}
}
은 특히 다음과 같은 오류 iDbSet.SetValue()에 충돌 그 iDbSet.PropertyType
은 IDbSet<XXX>
과 같습니다. 답변 충돌을 수정하지만 MOQ는 여전히 값을 할당하는 방법으로 가져옵니다 당신이 미래의 독자들에게 FakeDbSet<XXX>
을 기대하는 동안 따라서,
typeof(FakeDbSet<>).MakeGenericType(iDbSet.PropertyType)
는FakeDbSet<IDbSet<XXX>>
을 만듭니다. –