0
在其中一個「構建器」中,我們使用以下方法使用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);
}
有沒有其他方法可以做到這一點?我沒有卡住With的這個方法簽名。
這也將工作
public void With(Expression<Action<TCommand>> expression)
這樣就可以做到
With(x=>x.someProp=someValue)
我試圖得到一個輔助方法簽名With(Expression>表達式)工作,並且在那裏我沒有TProperty,並且我完全忘記了泛型參數:)。感謝您指出了這一點。 –
epitka
很高興幫助。 –