【发布时间】:2017-12-14 03:20:28
【问题描述】:
FakeItEasy 太棒了。非常感谢所有贡献者。
话虽如此,我遇到了一个用例,我想从配置了 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 的东西?
此外,我可以列出调用它的参数的值吗?
【问题讨论】:
标签: c# .net fakeiteasy