unit-testing 使用模拟框架验证行为
示例
当有必要验证被测系统和测试双打之间的交互时,将使用模拟。需要注意避免创建过于脆弱的测试,但是当测试方法只是编排其他调用时,模拟可能特别有用。
该测试验证了当被测方法被调用(ProcessRecord)时,where方法UseValue被调用了服务方法()。为此,它使用罐装数据设置存根:RecordFlag==true
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”调用to,这是来自记录where中的值Flag==true。
mockService.Verify(service => service.UseValue("Second"));
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下