В одном из «строителей» мы имеем следующий метод, который использует MOQ SetupGet. Я попробовал переписать его для использования FakeItEasy, но, похоже, нет способа сделать это, так как WithReturnType предоставляет только общую версию, где тип должен быть известен впереди. Нет универсальной версии, которая принимает фактический тип, определенный во время выполнения.Преобразование установки свойств MOQ в FakeItEasy
Предоставлено, что я провел целых 30 минут. на FakeItEasy, так что может быть лучше ...
Оригинальный метод с MOQ
public void With<TProperty>(Expression<Func<TCommand, TProperty>> expression, TProperty value)
{
CommandFake.SetupGet(expression).Returns(value);
}
С моим ограниченным знанием выражений я пытался переписывание его использовать FakeItEasy, но я не могу установить возвращаемое значение.
public void With<TProperty>(Expression<Func<TCommand, TProperty>> expression, TProperty value)
{
var methodName = string.Empty;
var e = (LambdaExpression) expression;
if (e.Body.NodeType == ExpressionType.MemberAccess)
{
var memberInfo = ((MemberExpression) e.Body).Member;
if (memberInfo.MemberType == MemberTypes.Property)
{
methodName = "get_" + memberInfo.Name;
}
//A.CallTo(CommandFake).Where(call => call.Method.Name == methodName)
// .WithReturnType<>()
}
//CommandFake.SetupGet(expression).Returns(value);
}
Есть ли другие способы сделать это? Я не застрял на этой сигнатуре метода для С.
Это также будет работать
public void With(Expression<Action<TCommand>> expression)
так, чтобы можно было сделать
With(x=>x.someProp=someValue)
Я пытался получить сигнатуру вторичного метода With (Expression> выражение), и там у меня не было TProperty, и я полностью забыл об общем аргументе :). Спасибо что подметил это. –
epitka
Рад, что это помогло. –