1

这两行代码给了我标题中提到的错误。我正在尝试为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.";
  }
}

我不确定我哪里出错了。方向会帮助我。

4

3 回答 3

0

我不是 Moles 用户,但...

“默认情况下,为所有接口和抽象类生成存根,尽管您也可以配置 Moles 为暴露虚拟方法的非抽象类生成存根”

所以

a)您是否正确配置 b)我注意到如果 a)正确,该方法未标记为虚拟

IE

public virtual string WriteStuff() { ... }

因为封闭类是具体的(未标记为抽象或接口)

于 2013-01-01T12:59:01.277 回答
0

从我发现的教程中:

每种鼹鼠类型的命名方式是在其名称前加上“M”并将其放入 .Moles 命名空间中。

所以也许你的线

var stubTestClass = new StubsTutorial.Moles.STestClass();

应该改为

var moleTestClass = new StubsTutorial.Moles.MTestClass();

虽然我没有使用 Microsoft Moles 的经验。

于 2013-01-01T13:38:52.410 回答
0

存根通过覆盖它们来为公共抽象和虚拟方法创建它们的假委托。如果该方法未标记为虚拟或抽象,则任何为存根委托分配值的尝试都将被编译器否决,因为该方法未被覆盖以返回分配的委托。尝试使用两种方法对测试类进行存根,一种是简单的公共方法,另一种是公共的虚拟方法。为了测试没有接口契约或抽象或虚拟方法的公共类,必须使用填充程序,而不是存根。

于 2014-01-09T20:50:24.200 回答