I've got these two lines on my code.
Customer customer = Repository.Customer.GetById(customerId);
Employee employee = customer.Employees.Single(e => e.IsPrimaryContact);
Now, I'm creating a unit test. Both Objects, customer and employee are protected so I need to mocked them.
I've successfully mocked the first one and created a mocked object 'customer' as its return for getting the customer By Id.
Customer customer = new Mock<Customer>().Object;
/* code ... code*/
var mockCustomerRepository = new Mock<ICustomerRepository>();
mockCustomerRepository.Setup(p => p.GetById(It.IsAny<Guid>())).Returns(customer);
Repository.Customer = mockCustomerRepository.Object;
As you can see, the 'employee' object is inside the mocked object 'customer' which means I also have to provide a mocked object inside my first mocked object (Customer). I'm expecting my code to be like this.
Employee employee = new Mock<Employee>().Object;
employee.IsPrimaryContact = true;
List<Employee> employees = new List<Employee>();
employees.Add(employee);
customer.Employees = employees;
/* code ... code*/
However, though I don't have any error on building my test. The customer.employee is ALWAYS NULL.
I would suggest you to try this code
Mock<Customer>() mockCustomer = new Mock<Customer>();
Employee employee = new Employee();
mockCustomer.Setup(x=>x.Employees).Returns(employee);
Customer customer = mockCustomer.Object;