Bri*_*asa 10 testing unit-testing mocking
我很好奇人们喜欢用什么方法来嘲笑和为什么.我所知道的两种方法是使用硬编码模拟对象和模拟框架.为了演示,我将概述一个使用C#的示例.
假设我们有一个名为GetEmployeeById的方法的IEmployeeRepository接口.
public interface IEmployeeRepository
{
Employee GetEmployeeById(long id);
}
Run Code Online (Sandbox Code Playgroud)
我们可以轻松地创建一个这样的模拟:
public class MockEmployeeRepository : IEmployeeRepository
{
public Employee GetEmployeeById(long id)
{
Employee employee = new Employee();
employee.FirstName = "First";
employee.LastName = "Last";
...
return employee;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在我们的测试中,我们可以使用setter或依赖注入显式地告诉我们的服务使用MockEmployeeRepository.我是嘲笑框架的新手,所以我很好奇为什么我们使用它们,如果我们可以做到以上几点?
goe*_*ing 11
那不是模拟,它是一个存根.对于存根,你的例子是完全可以接受的.
来自Martin Fowler:
模拟是我们在这里所讨论的:预编程的对象具有预期,形成了预期接收的调用的规范.
当你嘲笑某事时,通常会调用"验证"方法.
看看这个Mocks和Stubs之间的差异 http://martinfowler.com/articles/mocksArentStubs.html