【问题标题】:Error Setting up Property During Unit Testing Using Moq使用 Moq 进行单元测试期间设置属性时出错
【发布时间】:2012-10-05 11:55:09
【问题描述】:

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

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的吗?

谢谢大家!

【问题讨论】:

    标签: c# .net unit-testing moq


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      试试这个:-

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

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

      【讨论】:

      • 这并不能解决问题,因为原来界面中的Bar仍然是只读的
      • 额外更改生产代码以使测试表现良好,这在所有情况下都不是一个好主意
      猜你喜欢
      • 2011-01-18
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      相关资源
      最近更新 更多