5
我試圖找出過去幾個小時這Moq體操。我有以下課程 - 我正在嘗試做一些簡單的驗證,但它沒有成功 - 我似乎無法弄清楚爲什麼。嵌套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());
}
我不認爲這種說法「非設置方法不可驗證」是真實的。這是爲什麼。如果我在IContext中添加方法,我可以在沒有設置的情況下驗證它。這是IContext> IPerformanceCounters的嵌套性質,這引起了一個我似乎無法忍受的問題。 – splusq
我剛更新了我的答案。希望這樣做更有意義。最壞的情況下,你可以挖掘代碼,因爲它是開源的 –
謝謝 - Mock.Get是一個不錯的小竅門。 – splusq