在过去的几个小时里,我试图弄清楚这个 Moq 体操。我有以下课程 - 我正在尝试进行一些简单的验证并且它失败了 - 我似乎无法弄清楚为什么。
请注意,在 Moq 设置期间,我在请求 BeginCounter 时返回一个 Mock.Of - 但是当我尝试验证它时它失败了。但是,如果我取消注释 p.Setup(e => e.BeginCounter.Increment()) 行,则验证有效。
我错过了什么?
public interface IPerformanceCounters
{
void Increment();
void Decrement();
}
public interface IContext
{
IPerformanceCounters BeginCounter { get; }
}
public class Test
{
private readonly IContext context;
public Test(IContext context) { this.context = context; }
public void React() { this.context.BeginCounter.Increment(); }
}
void Test()
{
// ARRANGE
var p = new Mock<IContext>();
p.Setup(e => e.BeginCounter).Returns(() => Mock.Of<IPerformanceCounters>()); // This does not work
// p.Setup(e => e.BeginCounter.Increment()); // However, this works!
// ACT
var test = new Test(p.Object);
test.React();
// ASSERT
p.Verify(v => v.BeginCounter.Increment(), Times.Once());
}