在最近的一次采访中,有人问我为什么要创建模拟对象.我的回答是这样的:"拿一个数据库 - 如果你正在编写测试代码,你可能不希望那个测试实时连接到将要执行实际操作的生产数据库."
从回答来看,我的回答显然不是面试官所寻求的.什么是更好的答案?
我很好奇人们喜欢用什么方法来嘲笑和为什么.我所知道的两种方法是使用硬编码模拟对象和模拟框架.为了演示,我将概述一个使用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.我是嘲笑框架的新手,所以我很好奇为什么我们使用它们,如果我们可以做到以上几点?