IDataReader와 관련하여 Moq 및 Automapper에 문제가 있습니다. stackoverflow에서 예제를 발견하고 코드를 수정했습니다.IDataReader에서 Moq 사용에 관한 문제를 해결하는 방법
public static IDataReader MockIDataReader<T>(List<T> ojectsToEmulate) where T : class
{
var moq = new Mock<IDataReader>();
// This var stores current position in 'ojectsToEmulate' list
var count = 0;
moq.Setup(x => x.Read())
// Return 'True' while list still has an item
.Returns(() => count < ojectsToEmulate.Count)
// Go to next position
.Callback(() => count++);
var properties = typeof (T).GetProperties();
foreach (PropertyInfo t in properties)
{
var propName = t.Name;
moq.Setup(x => x[propName]).Returns(() => ojectsToEmulate[count].GetType().GetProperty(propName).GetValue(ojectsToEmulate[count],null));
}
return moq.Object;
}
}
내 매핑 :
Mapper.Configuration.CreateMap(typeof(IDataReader), typeof(IEnumerable<T>));
var result = Mapper.Map<IDataReader, IEnumerable<T>>(reader);
내가 여기있어 문제는 내 결과는 1 개 결과 cityModel을 가지고 있지만 모든 것이 속성이 null 인입니다. 독자가 [ "name"]처럼 조롱받은 독자의 가치를 확인하면 조롱은 정확하지만 Automapper 솔기는 문제가 발생하도록 "Alingsås"값을 얻었습니다. 나는 그것을 모의하는 나의 방법에 전달한 객체 목록을 사용한다.
var cityModel = new CityModel();
cityModel.Name = "Alingsås";
cityModel.Id = "SE";
cityModel.CountryId = "SE";
var cityModels = new List<CityModel>();
cityModels.Add(cityModel);
_fakeReader = MockTester.MockIDataReader(cityModels);
코드는 예외가 발생되지, 잘 작동하지만 매퍼는 valules없이 나에게 객체를 제공합니다. 디버거에서 리플렉션 코드가 작동하는 것을 볼 수 있지만 내 x [ "Name"]과 같은 솔기가 IDataReader에서 Automapper 호출 방법이 아닙니까? 아니면 그렇지?
무엇이 잘못 될 수 있습니까?
당신이 당신의'MockTester.MockIDataReader' 방법 의 전체 코드를 게시 할 수 : 당신이 그것을 작동하게하는 몇 가지 추가 방법 설정에 필요한 Automapper의 소스를 확인
? – nemesv
전체 코드가 추가되었습니다. 얼마 전 여기에 다른 게시물의 일부가 있습니다. 디버그 할 때 x [name] 값이 설정됩니다. – RockJohan
Nice :) 문제를 재현하기 위해 만든 'MockIDataReader'와 거의 같습니다. 기본적으로 다른 인덱서를 설치해야하며, 잠시 후에 내 대답을 게시 할 것입니다. – nemesv