Mocking a repository with Moq

三世轮回 提交于 2019-12-24 12:22:54

问题


To mock a repository, I use the code below. I don't understand why the variable empl is always null.

Do you know what I missed ?

Thanks,

[TestMethod]
public void Test()
{
    var employee = new Employee { EmployeeID = 1, Code = "Code", FirstName = "MyFirstName", LastName = "MyName" };

    var employeeRepository = new Mock<IEmployeeRepository>();
    employeeRepository.Setup(x => x.Add(employee)).Verifiable();

    var employeeService = new EmployeeService(employeeRepository.Object);
    var empl = employeeService.GetById(1);

    Assert.IsNotNull(empl);
}

public class Employee
{
    public int EmployeeID { get; set; }
    public string Code { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public interface IEmployeeRepository : IBaseRepository<Employee> {}

public interface IBaseRepository<TEntity>
{
    IQueryable<TEntity> Get();
    TEntity Add(TEntity entity);
    void Delete(int id);
    int Count();
}

public class EmployeeService
{
    private IEmployeeRepository _employeeRepository;

    public EmployeeService(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

    public Employee GetById(int id)
    {
        return _employeeRepository.Get().FirstOrDefault(x => x.EmployeeID == id);
    }

    public void Add(Employee employee)
    {
        _employeeRepository.Add(employee);
    }
}

回答1:


You are mocking wrong method. Mock Get:

employeeRepository.Setup(x => x.Get()).Returns(new[] { employee });

Mock is a fake object, it doesn't have any logic in methods. You have to tell it how exactly it should behave (setup) so that in your test this behavior can be replayed.



来源:https://stackoverflow.com/questions/24690868/mocking-a-repository-with-moq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!