好吧,我们假设我有一个类似下面的课程......
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是只读的。 参数名称:表达式
所以,有三个问题:
SetReturnsDefault
?全部谢谢!
答案 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。否则它将是只读的。