我很好奇人们喜欢使用什么方法进行模拟以及为什么。我知道的两种方法是使用硬编码模拟对象和模拟框架。为了进行演示,我将概述一个使用 C# 的示例。
假设我们有一个 IEmployeeRepository 接口(interface)和一个名为 GetEmployeeById 的方法。
public interface IEmployeeRepository
{
Employee GetEmployeeById(long id);
}
我们可以很容易地创建一个模拟:
public class MockEmployeeRepository : IEmployeeRepository
{
public Employee GetEmployeeById(long id)
{
Employee employee = new Employee();
employee.FirstName = "First";
employee.LastName = "Last";
...
return employee;
}
}
然后,在我们的测试中,我们可以明确地告诉我们的服务使用 MockEmployeeRepository,使用 setter 或依赖注入(inject)。我是模拟框架的新手,所以我很好奇我们为什么要使用它们,如果我们可以做到以上几点?
最佳答案
那不是模拟,而是 stub 。对于 stub ,您的示例是完全可以接受的。
来自马丁·福勒:
Mocks 是我们在这里谈论的内容:预编程的对象形成了预期接收的调用规范。
当您模拟某些东西时,您通常会调用“验证”方法。
看看这个模拟和 stub 之间的区别 http://martinfowler.com/articles/mocksArentStubs.html
关于unit-testing - 硬编码模拟对象与模拟框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370617/