Я новичок в модульном тестировании, и я хочу создать тест для своей функции поиска. Мой уровень обслуживания выглядит примерно так:Moq Единица работы
public class EmployeeService: BaseService, IEmployeeService
{
public EmployeeService(IUnitOfWork unitOfWork) : base(unitOfWork)
{
_employeeRepo = unitOfWork.EmployeeRepository;
}
public IEnumerable<Employee> Search(Employee advancedSearch, int[] divisionIds, bool showInactive, int pageSize, int? page)
{
return _employeeRepo.Search(advancedSearch, divisionIds, showInactive, pageSize, page);
}
}
Unit Test:
[Test]
public void SearchShouldFilterActiveEmployees()
{
var employees = new List<Employee>
{
new Employee { EmployeeId = 105, FirstName = "John", LastName = "Smith", IsActive = true },
new Employee { EmployeeId = 162, FirstName = "John", LastName = "Doe", IsActive = true },
new Employee { EmployeeId = 3, FirstName = "Jan", LastName = "Doe", IsActive = true }
};
var mockUnitOfWork = new Mock<IUnitOfWork>();
var sut = new EmployeeService(mockUnitOfWork.Object);
var employeeSearchCriteria = new Employee
{
FirstName = "John"
};
var employeesReturned = sut.Search(employeeSearchCriteria, null, false, 25, 1);
Assert.IsTrue(employeesReturned.Count() == 2);
}
Я думаю, что вопрос с насмешливым UnitOfWork
. Я получаю Null Reference Exception
. Как я могу пометить UnitOfWork
, чтобы я мог проверить, что правильное количество сотрудников возвращается из поиска.
Вам нужно издеваться '' EmployeeRepository' и Search' в частности ..., как побочный эффект ваш тест будет добавлять меньшее значение, чем вы ожидаете, так как не будет никакой реальной фильтрации при условии доступа к базе данных не подделать –
Как вы думаете, будет ли смысл создавать этот тест? В моих тестах хранилища я уже создал тест, подобный этому, кроме «System Under Test» был бы «EmployeeRepository», а не «EmployeeService». Я просто хочу проверить, что мой сервисный уровень может вызвать метод «Поиск» в моем репозитории. – Andrew
имеет смысл протестировать его, это не самая вероятная точка отказа, так как в принципе нет никакой логики, но вы можете проверить, что вы называете «поиск» правильными параметрами. Создайте настройку, чтобы вернуть 2 сотрудника только тогда, когда вызывается «Поиск» с правильными параметрами. Если используются некорректные параметры, 'Поиск' возвращает значение null, и ваш assert не будет работать –