我正在尝试调试以下行:
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)与痣以及如何轻松去除它们。其中许多具有类似于以下的 lambda 行:
MMyClass.AllInstances.DoSomething = () => "Hello world";
Assert.AreEqual("Hello world", new MyClass().DoSomething());
根本问题是 Moles 从一个不带参数并返回字符串的方法开始。Moled 等效项将其自己的类作为参数并返回一个字符串。Moles 肯定知道 TestString() 是 OrigValue 的成员。
也许我的问题是使用 VS Express 而不是付费版本的结果。我可以忍受这一点,但知道我为什么需要黑客仍然很有趣。在我不知情的情况下,黑客可能会产生不正确的测试结果。
BTW:我认为这个例子证明了对象浏览器的价值。