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

Mik*_*oud 1 .net c# unit-testing moq

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

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

    public void Initialize()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

那么,三个问题:

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

谢谢大家!

Zde*_*vic 10

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

mock.SetupGet(p => p.Bar).Returns("whatever");
Run Code Online (Sandbox Code Playgroud)

如果您希望未显式设置的所有字符串属性返回一些字符串,请执行以下操作:

mock.SetReturnsDefault<string>("whatever"); 
// IMPORTANT: don't call mock.SetupGet(p => p.Bar) as it will override default setting
Run Code Online (Sandbox Code Playgroud)