FakeItEasy
은 놀랍습니다. 모든 기여자에게 커다란 "고맙습니다".FakeItEasy.Invokes() 내에서 호출 된 메서드 이름
그런데, 모든 메소드에 대해 Invokes
을 명시 적으로 구성하지 않고도 Invokes
으로 구성된 람다 내부에서 알고있는 유익한 객체 메소드가 실제로 호출 된 유스 케이스를 발견했습니다. 내가 호출 된 인터페이스에 어떤 방법을 알 수 있도록하고 싶습니다, Invokes
에 대한 람다 내부
public interface ILogger {
void Info(string msg);
void Error(string msg);
}
var logger = A.Fake<ILogger>();
A.CallTo(logger).Invokes(
() => {
Debug.WriteLine(CurrentMethodName);
// CurrentMethodName should return "Error", or "Info", as appropriate
});
logger.Error("Error");
: 여기
무슨 뜻인지의 간단한 예입니다. 즉,CurrentMethodName
을 구현하려면 어떻게해야합니까?
이것은 내가 뭘하려 :
public string CurrentMethodName
{
get
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
}
가 작동하지 않는 이유는 logger.Error
이 시점에서 모든 호출 스택에없는 것입니다. 호출 스택에있는 내용은 anton 인 blah_blah_blah.AnonymousMethod__7_0()
과 같습니다. 메서드를 Invoke
에 제공합니다.
그러나, FakeItEasy
가 위조되고 있는지 알 수 있어야합니다라고 CurrentMethodName
시간 ...에
logger.Error
가 호출되었음을보고 액세스 할 수있는 매개 변수 또는 전역 변수, 또는 뭔가가 있나요 ?
또한, 내가 호출 된 인수의 값을 나열 할 수 있습니까?
환상적인 :
또는, (그 중 4까지) 직접 매개 변수 일치하는 번호를 받아 작업을 사용하여 인수를 얻을 수 있습니다! FakeItEasy는 일을 매우 쉽게 만들어 주므로 내가 아주 간단한 것을 놓치고 있다는 것을 알았습니다. :-) 고맙습니다. – Optimax