这两行代码给出了标题中提到的错误。我正在尝试为TestClass
var stubTestClass = new StubsTutorial.Moles.STestClass();
stubTestClass.WriteStuff = () => "Moled in static class!";
这就是函数WriteStuff()的定义方式
public class TestClass {
public string WriteStuff() {
return "Stuff written in main class.";
}
}
我不确定我哪里出错了。方向会帮助我。
答案 0 :(得分:0)
我不是Moles用户,但......
“默认情况下,会为所有接口和抽象类生成存根,但您也可以配置Moles为显示虚拟方法的非抽象类生成存根”
所以
a)您是否正确配置 b)我注意到,如果a)是正确的,该方法没有标记为虚拟
即
public virtual string WriteStuff() { ... }
因为封闭类是具体的(未标记为抽象或接口)
答案 1 :(得分:0)
从a tutorial我发现:
通过在其名称前加上“M”来命名每种痣类型 并将其放入.Moles命名空间。
所以也许你的行
var stubTestClass = new StubsTutorial.Moles.STestClass();
应改为
var moleTestClass = new StubsTutorial.Moles.MTestClass();
虽然我没有使用Microsoft Moles的经验。
答案 2 :(得分:0)
Stubs通过覆盖它们来为公共抽象和虚拟方法创建伪代理。如果该方法未标记为虚拟或抽象,则编译器将否决任何尝试为存根委托分配值,因为该方法未被覆盖以返回指定的委托。通过使用两种方法对一个测试类进行存根来尝试它,一种是公共虚拟,另一种是公共虚拟。为了测试没有接口契约或抽象或虚方法的公共类,必须使用填充程序,而不是存根。