使用模擬框架來驗證行為
當需要驗證被測系統和測試雙打之間的相互作用時,使用模擬。需要注意避免建立過於脆弱的測試,但是當測試方法只是編排其他呼叫時,模擬可能特別有用。
該測試驗證當呼叫被測方法(ProcessRecord
)時,為 Record
呼叫服務方法(UseValue
)。為此,它使用固定資料設定存根:
var stub = new Mock<IRecordProvider>();
stub.Setup(provider => provider.GetRecords()).Returns(new List<Record> {
new Record { Id = 1, Flag=false, Value="First" },
new Record { Id = 2, Flag=true, Value="Second" },
new Record { Id = 3, Flag=false, Value="Third" }
});
然後它設定了一個實現 IService
介面的模擬:
var mockService = new Mock<IService>();
mockService.Setup(service => service.UseValue(It.IsAny<string>())).Returns(true);
然後將它們提供給被測系統,並呼叫要測試的方法。
var sut = new SystemUnderTest(mockService.Object);
var processed = sut.ProcessRecord(stub.Object);
然後可以詢問模擬以驗證已經對其進行了預期的呼叫。在這種情況下,呼叫 UseValue
,其中一個引數為 Second
,這是記錄所在的 Flag==true
的值。
mockService.Verify(service => service.UseValue("Second"));