Mocking a repository with Moq

c#, mocking, moq, repository, unit-testing

Solution

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.

Problem

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); } } ```

Original source