次の行をデバッグしようとしています。
MOrigValue.AllInstances.TestString = () => "New value";
下に赤い波線があります:
() => "New value";
マウスオーバーすると、次のエラーが表示されます。
Delegate 'Microsoft.Moles.Framework.MolesDelegates.Func<OrigValueP.OrigValue, string>' does not take 0 arguments
完全なクラスは次のとおりです。
namespace OrigValueP
{
public class OrigValue
{
public string TestString() { return "Original value"; }
}
}
これがオブジェクトブラウザからの情報です。
プロパティMOrigValue.AllInstances.TestStringをクリックします。
public static Microsoft.Moles.Framework.MolesDelegates.Func<OrigValueP.OrigValue,string> TestString { set; }
Member of OrigValueP.Moles.MOrigValue.AllInstances
だから、私のような非技術者にとっては、それは上記の赤い波線のエラーを説明するでしょう。
プロパティMOrigValue..TestStringをクリックします。
public Microsoft.Moles.Framework.MolesDelegates.Func<string> TestString { set; }
Member of OrigValueP.Moles.MOrigValue
私には、これはMOrigValue.AllInstances.TestStringに対して期待していた定義のように見えます。言い換えると、実際にはパラメータを持たず、文字列を返すMoledの「メソッド」であるプロパティです。
実験として、上記の最初のオブジェクトブラウザ情報に基づいて、次のように、入力パラメータとしてクラスを挿入しました。
MOrigValue.AllInstances.TestString = (OrigValue) => "New value";
これは動作します:)
しかし、私の回避策は「ハック」のように見えます。ほくろに関連するインターネット上のすべてのページ(StackOverflowを含む)と、それらを簡単に削除する方法を見てきました。それらの多くには、次のようなラムダのある行があります。
MMyClass.AllInstances.DoSomething = () => "Hello world";
Assert.AreEqual("Hello world", new MyClass().DoSomething());
基本的な問題は、Molesがパラメーターを受け取らず、文字列を返すメソッドから開始したことです。Moledに相当するものは、独自のクラスをパラメーターとして受け取り、文字列を返します。確かに、MolesはTestString()がOrigValueのメンバーであることを知っています。
たぶん私の問題は、有料版ではなく、VSExpressを使用した結果です。私はそれと一緒に暮らすことができますが、それでも私がハックを必要とする理由を知ることは興味深いでしょう。私の知らないうちに、ハッキングによって誤ったテスト結果が生成される場合があります。
ところで:この例は、オブジェクトブラウザの価値を証明していると思います。