【发布时间】:2019-11-16 05:40:56
【问题描述】:
我是 Moq 的新手。我在嘲笑 PagingOptions 类。下面是这个类的样子:
public class PagingOptions
{
[Range(1, 99999, ErrorMessage = "Offset must be greater than 0.")]
public int? Offset { get; set; }
[Range(1, 100, ErrorMessage = "Limit must be greater than 0 and less than 100.")]
public int? Limit { get; set; }
public PagingOptions Replace(PagingOptions newer)
{
return new PagingOptions
{
Offset = newer.Offset ?? Offset,
Limit = newer.Limit ?? Limit
};
}
}
这是我的模拟版课程,
var mockPagingOptions = new Mock<PagingOptions>();
mockPagingOptions.Setup(po => po.Limit).Returns(25);
mockPagingOptions.Setup(po => po.Offset).Returns(0);
设置属性值时出现以下错误。我是不是做错了什么。看起来我不能起订量具体课程?只有接口可以被模拟?请帮忙。
谢谢, 阿卜杜勒
【问题讨论】:
-
将属性
Offset和Limit设为虚拟。 docs.microsoft.com/en-us/dotnet/csharp/language-reference/… -
在这种情况下,似乎没有理由嘲笑它。您可以只创建
PagingOptions的实际实例并设置其属性,而不是使用Mock。不要让任何东西变得虚拟。 -
除非这是XY problem,否则我认为没有必要模拟这个对象。使用该对象似乎没有明显的影响,这将保证必须创建一个模拟
-
@ScottHannen 如何找到要模拟和不模拟的对象?你是如何区分的?
-
@AbdulRahman stackoverflow.com/a/38256/5233410
标签: c# .net unit-testing moq