どのモ離の枠組みが運用されているか?
-
26-09-2019 - |
質問
モ がアイソレーションの枠組み作成しまいました。涼しい機能のモていることで擬似静的/非仮想の方法及び封印されたクラスはできませんの枠組みのようにMoq).下記のデモのモき:
Assert.AreNotEqual(new DateTime(2012, 1, 1), DateTime.Now);
// MDateTime is part of Moles; the below will "override" DateTime.Now's behavior
MDateTime.NowGet = () => new DateTime(2012, 1, 1);
Assert.AreEqual(new DateTime(2012, 1, 1), DateTime.Now);
うモかすことで、CIL体のようなもの DateTime.Now
を行います。以来、モグラのないオープンソースが、私は知る機構モ使用するためにmodify'CILを行います。誰でもできますからず。
解決
モル実装CLRプロファイラ(特に ICorProfilerCallback のインタフェース)それは、彼らが.NETランタイムによってアセンブリコードにコンパイルされる前に、MSILメソッド本体を書き換えることができます。これは JitCompileStarted のコールバック
を介して特定ので行われますは、それぞれの方法では、ほくろは回り道を紹介し、このようになります。
static struct DateTime
{
static DateTime Now
{
get
{
Func<DateTime> d = __Detours.GetDelegate(
null, // this point null in static methods
methodof(here) // current method token
);
if(d != null)
return d();
... // original body
}
}
}
あなたがモルを設定すると、デリゲートは、メソッドが実行されるwhenver見上げます基礎となる__Detours辞書に格納されます。
他のヒント
このような仕事としてラッパーのいず組み立てたい、例えば mscorlib
(この例ではbaseingにモ組み立てラッパーの mscorlib
).この牧志公設市場と太平通り商店街もいく力 置き換えます。ネット方式によるdelegateに記述によるメリカ-サンフランシスコ.
これがうまくいきませんautomagicaly.まず最初に作成前にこの開始、 モXMLの設定 ファイルリストのアセンブリ"ラッパー"は、このコードによりモを参照のこのassembilesからconfigファイルです。なければなりません、このファイルに追加 using namespace System.Moles
, は、前の機能 [HostType("Moles")]