我正在嘗試使用基于佇列回傳值的回圈動態地進行模擬。使用的代碼如下(從stackoverflow上的另一個答案中獲得)。
var numberQueue = new Queue<int>(new[] { 4, 8, 16, 43});
var mock = new Mock<ITest>();
mock.SetupSequence(x => x.GetNumber()).Returns(numberQueue.Dequeue);
int x1 = mock.Object.GetNumber(); // expected: 4 actual: 4
int x2 = mock.Object.GetNumber(); // expected: 8 actual: 0
int x3 = mock.Object.GetNumber(); // expected: 16 actual: 0
int x4 = mock.Object.GetNumber(); // expected: 32 actual: 0
x1.Should().Be(4); // passes
x2.Should().Be(8); // fails
x3.Should().Be(16); // fails
x4.Should().Be(32); //fails
第一個作業正常,但之后一切都為 0。我試圖讓它以這種方式運行,因為我希望能夠為 IDataReader 動態設定一個模擬。
uj5u.com熱心網友回復:
有多種方法可以解決您的問題,讓我向您展示三種最基本的方法。
選項1
使用Setup代替SetupSequence
mock.Setup(x => x.GetNumber())
.Returns(numberQueue.Dequeue);
在此更改之后,您的測驗將在該x4.Should().Be(32)行失敗,因為x4是 43。
選項#2
SetupSequence與多個Returns呼叫一起使用
mock.SetupSequence(x => x.GetNumber())
.Returns(numberQueue.Dequeue)
.Returns(numberQueue.Dequeue)
.Returns(numberQueue.Dequeue)
.Returns(numberQueue.Dequeue);
選項#3
mock.SetupSequence(x => x.GetNumber())
.Returns(4)
.Returns(8)
.Returns(16)
.Returns(43);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/528202.html
標籤:C#单元测试队列起订量
