1
使用NUnit和Moq,我試圖圍繞遺留代碼進行一些測試,然後再做更多的重構。我需要測試一個方法是否保持循環,直到告訴停止。這是我的想法該怎麼做:這是一個很好的方式來設置Moq返回一個特定的值只有一定的次數?
[TestCase]
public void KeepsCallingDoSomethingUntilShouldIKeepGoingIsFalse()
{
var dal = new Mock<IDataAccessLayer>();
var sut = new MyService(dal.Object);
int numberOfTimesToReturnTrue = 5;
dal.Setup(x => x.ShouldIKeepGoing())
.Callback(() => numberOfTimesToReturnTrue--)
.Returns(() => numberOfTimesToReturnTrue >= 0);
sut.Blah();
dal.Verify(x => x.DoSomething(), Times.Exactly(5));
}
這個測試很難理解嗎?這是一個有效/乾淨的方式來做到這一點?有沒有更好的辦法?關於用這種方式編寫測試的一些問題讓我感到困惑。
我似乎無法在Moq 3.1.416中以這種方式進行AtMost調用。這是4.0測試版嗎? 但我認爲它沒有回調就更清潔,即使我必須在我的驗證中指定時間。 謝謝。 – JohnRudolfLewis 2010-05-06 16:55:03
我們正在使用4.0.812.4。 – Mark 2010-05-06 20:03:05