使用Moq在单元测试期间设置属性时出错

时间:2012-10-05 11:55:09

标签: c# .net unit-testing moq

好吧,我们假设我有一个类似下面的课程......

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:-3)

试试这个: -

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

    public void Initialize()
    {
        ...
    }
}

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