FakeItEasy.Invokes() 中调用的方法名称
Called method name inside FakeItEasy.Invokes()
FakeItEasy
太棒了。对所有贡献者的巨大 "thank you"。
话虽如此,我 运行 在一个用例中,我想从配置了 Invokes
的 lambda 内部知道实际调用了伪造对象的什么方法,而不必明确地为每个方法配置 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");
在 Invokes
的 lambda 中,我想知道调用了接口上的哪个方法。换句话说,我如何实现 CurrentMethodName
?
这是我试过的:
public string CurrentMethodName
{
get
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
}
它不起作用的原因是 logger.Error
此时根本不在调用堆栈中。调用堆栈中的内容类似于 blah_blah_blah.AnonymousMethod__7_0()
,这是匿名的。提供给 Invoke
.
的方法
但是,在CurrentMethodName
被调用的时候FakeItEasy
必须能够知道被伪造的是什么...
是否有参数或全局变量,或我可以访问以查看确实调用了 logger.Error
的内容?
此外,我可以列出调用它的参数值吗?
很高兴您喜欢 FakeItEasy。
有几个 Invokes
重载。如果你使用一个在收到的电话上接受 Action
的电话,你可以实现你想要的:
A.CallTo(logger).Invokes(call =>
Debug.WriteLine(call.Method.Name));
call
参数知道很多关于调用的信息,包括传入的参数,可通过 call.Arguments
或 call.GetArgument
.
访问
或者,您可以使用接受匹配数量参数的操作直接获取参数(最多 4 个):
A.CallTo(logger).Invokes((string message) => Debug.WriteLine(message));
FakeItEasy
太棒了。对所有贡献者的巨大 "thank you"。
话虽如此,我 运行 在一个用例中,我想从配置了 Invokes
的 lambda 内部知道实际调用了伪造对象的什么方法,而不必明确地为每个方法配置 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");
在 Invokes
的 lambda 中,我想知道调用了接口上的哪个方法。换句话说,我如何实现 CurrentMethodName
?
这是我试过的:
public string CurrentMethodName
{
get
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
}
它不起作用的原因是 logger.Error
此时根本不在调用堆栈中。调用堆栈中的内容类似于 blah_blah_blah.AnonymousMethod__7_0()
,这是匿名的。提供给 Invoke
.
但是,在CurrentMethodName
被调用的时候FakeItEasy
必须能够知道被伪造的是什么...
是否有参数或全局变量,或我可以访问以查看确实调用了 logger.Error
的内容?
此外,我可以列出调用它的参数值吗?
很高兴您喜欢 FakeItEasy。
有几个 Invokes
重载。如果你使用一个在收到的电话上接受 Action
的电话,你可以实现你想要的:
A.CallTo(logger).Invokes(call =>
Debug.WriteLine(call.Method.Name));
call
参数知道很多关于调用的信息,包括传入的参数,可通过 call.Arguments
或 call.GetArgument
.
或者,您可以使用接受匹配数量参数的操作直接获取参数(最多 4 个):
A.CallTo(logger).Invokes((string message) => Debug.WriteLine(message));