我熟悉单元测试,但我仍然在学习模拟和模拟框架。我得到了想法(我认为),但语法似乎仍然有点异国情调。我正在考虑创建一些自动生成接口和类的模拟实现的T4模板。使用泛型和扩展方法的组合,这可以让我做这样的事情:
var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'Insert'
var target = new CustomerController(service);
var item = new Customer();
target.Insert(item);
service.InsertMethod.Assert.WasLastCalledWith(item);
或:
var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'GetById'
var target = new CustomerController(service);
var item = new Customer();
target.GetByIdMethod.ShouldReturn(item);
var actual = target.Edit(1);
service.GetByIdMethod.Assert.WasLastCalledWith(1);
Assert.AreEqual(actual.ViewData.Model, item);
首先,这是否真的“嘲弄”,或者我错过了一些基本的东西。其次,这似乎是一种合理的方法,还是有理由使用框架而不必手动创建类似的类?第三,那里有什么相似的东西吗?我环顾四周,找不到多少......
答案 0 :(得分:0)
首先,这是否真的“嘲弄”, 或者我错过了一些基本的东西。
你展示的第二个例子,是在这一行发生的模拟:
target.GetByIdMethod.ShouldReturn(item);
这使您可以为target.GetByIdMethod
(item
),返回虚假值,而不会实际调用target.GetByIdMethod
。
其次,这似乎是这样的 是一个合理的方法,还是在那里 使用超越框架的原因 不必手动创建类似的 类?
我们使用模拟框架的原因是我们想要为某些方法返回假值,以便我们可以轻松控制我们想要测试的内容。此外,通过使用模拟框架,我们还可以断言调用了正确的方法,和/或使用正确的参数。
你是什么意思?你是说有任何嘲弄框架做类似的事情吗?或者那里有任何单元测试代码模板生成引擎吗?有很多mocking frameworks out there。至于是否有任何单元测试代码模板生成引擎,嗯,我不确定。第三,还有别的吗? 有类似的吗?