And*_*rew 3 c# nunit unit-testing 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);
}
}
Run Code Online (Sandbox Code Playgroud)
单元测试:
[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);
}
Run Code Online (Sandbox Code Playgroud)
我认为问题在于嘲笑UnitOfWork. 我得到了一个Null Reference Exception. 我如何才能最小起订量,UnitOfWork以便我可以测试从搜索中返回的员工数量是否正确。
对于模拟存储库,最容易为其创建接口,例如IEmployeeRepo. 然后在EmployeeService课堂上,该字段将是 private readonly IEmployeeRepo _employeeRepo.
在测试中,您可以验证它是否Search被调用。
bool searchwasCalled = false;
Mock<IEmployeeRepo> repositoryMock = new Mock<IEmployeeRepo>();
repositoryMock.Setup(r => r.Search(
It.IsAny<Employee>(), It.IsAny<int[]>(), It.IsAny<bool>(), It.IsAny<int>(),
It.IsAny<int?>()))
.Callback(() => searchwasCalled = true);
var mockUnitOfWork = new Mock<IUnitOfWork>();
mockUnitOfWork.Setup(uow => uow.EmployeeRepository).Returns(repositoryMock.Object);
var sut = new EmployeeService(mockUnitOfWork.Object);
var employeeSearchCriteria = new Employee
{
FirstName = "John"
};
sut.Search(employeeSearchCriteria, null, false, 25, 1);
Assert.IsTrue(searchwasCalled, "Search was not called.");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4147 次 |
| 最近记录: |