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
は、この時点で、すべてのコールスタックではないということです。コールスタックにあるものは、blah_blah_blah.AnonymousMethod__7_0()
のようなものです。これはanonです。メソッドを提供しています(Invoke
)。
しかし、時間CurrentMethodName
でFakeItEasy
が偽造されているかを知ることができなければならないと呼ばれている...
は、パラメータ、またはグローバル変数、または私は実際にlogger.Error
が呼び出されたことを確認するためにアクセスできるものがあります?
さらに、呼び出された引数の値をリストできますか?
ファンタスティック:
また、あなたは(それらの4まで)直接パラメータの一致数を受け入れアクションを使用して引数を取得することができます! FakeItEasyは物事をとても簡単にして、私が何か非常に単純なものを見逃していたことを知っていました。 :-) ありがとうございました。 – Optimax