Reputation: 19903
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);
}
}
Upvotes: 3
Views: 2999
Reputation: 31444
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.
Upvotes: 5