MOQ 같은 오브젝트 특별한 '마커'함께 스텁되는 메소드 매개 변수를 요구함으로써이 접근 필요한 매개 변수에 대한 개념이 없습니다.) 단위 테스트를 위해 객체 조롱을 위해 기준을 기반으로 매개 변수를 실제로 일치시키기 위해 조금 더 나아가고 있습니다. source code is available 및 몇 가지 아이디어를 줄 수 있습니다. 그들은 표현 나무로 모든 종류의 재미있는 속임수를 사용합니다. 여기
는 MOQ 소스를 기반으로 한 예이다 (비트를 해킹하지만, 상기 방법은 식으로부터 추출 할 수있는 방법을 나타낸다)
:
internal static void ExtractMethod<T>(Expression<Action<T>> expression)
where T : class
{
var methodCall = expression.ToMethodCall();
var method = methodCall.Method;
var args = methodCall.Arguments.ToArray();
}
스트레이트 MOQ 소스로부터
/// <summary>
/// Casts the body of the lambda expression to a <see cref="MethodCallExpression"/>.
/// </summary>
/// <exception cref="ArgumentException">If the body is not a method call.</exception>
public static MethodCallExpression ToMethodCall(this LambdaExpression expression)
{
Guard.NotNull(() => expression, expression);
var methodCall = expression.Body as MethodCallExpression;
if (methodCall == null)
{
throw new ArgumentException(string.Format(
CultureInfo.CurrentCulture,
Resources.SetupNotMethod,
expression.ToStringFixed()));
}
return methodCall;
}
이것은 코드에서 작동하지만 컴파일러가 표현식을 만들 수 있도록 '더미'매개 변수를 전달해야합니다. 그래서 만약 당신이 있었다 :
ExtractMethod(s => s.SomeMethod(0, null));
s.SomeMethod''의 유형 서명은 무엇입니까 :
은 그럼 당신은로 전달거야? – stakx
대체 무슨 짓을하려는거야? :) 대답을보고 궁금합니다 ... –
그가하려고하는 일은'Func> ' –