1

好吧,假设我有一个像下面这样的课程......

public class Foo : IFoo
{
    public string Bar
    {
        get { ... }
    }

    public void Initialize()
    {
        ...
    }
}

...正如你所见,它实现了一个接口,所以我可以模拟它。现在,在我的单元测试中,我正在构建这样的模拟......

var mock = new Mock<IFoo>();
mock.SetupProperty(p => p.Bar).SetReturnsDefault("Some static value here.");

...但是,当测试运行时,我收到以下错误...

System.ArgumentException:属性 IFoo.Bar 是只读的。参数名称:表达式

所以,三个问题:

  1. 我究竟做错了什么?
  2. 我需要做什么?
  3. 你能解释一下我是怎么误解的SetReturnsDefault吗?

谢谢大家!

4

2 回答 2

10

显然,错误消息告诉您不能像那样模拟只读属性。相反,请尝试:

mock.SetupGet(p => p.Bar).Returns("whatever");

如果您希望所有未明确设置为返回某个字符串的字符串属性,请执行以下操作:

mock.SetReturnsDefault<string>("whatever"); 
// IMPORTANT: don't call mock.SetupGet(p => p.Bar) as it will override default setting
于 2012-10-05T11:58:21.587 回答
-3

试试这个:-

public class Foo : IFoo
{
    priave string bar;
    public string Bar
    {
        get { ... }
        set {bar=value;}
    }

    public void Initialize()
    {
        ...
    }
}

您必须指定 Set。否则它将是只读的。

于 2012-10-05T12:02:30.477 回答