Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最小起订量工作单位_C#_Unit Testing_Nunit_Moq - Fatal编程技术网

C# 最小起订量工作单位

C# 最小起订量工作单位,c#,unit-testing,nunit,moq,C#,Unit Testing,Nunit,Moq,我不熟悉单元测试,我想为我的搜索功能创建一个测试。我的服务层看起来像: public class EmployeeService: BaseService, IEmployeeService { public EmployeeService(IUnitOfWork unitOfWork) : base(unitOfWork) { _employeeRepo = unitOfWork.EmployeeRepository; } public IEn

我不熟悉单元测试,我想为我的搜索功能创建一个测试。我的服务层看起来像:

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);
    }
}
public类EmployeeService:BaseService、ieemployeeservice
{
公共雇员服务(IUnitOfWork unitOfWork):基础(unitOfWork)
{
_employeeRepo=unitOfWork.EmployeeRepository;
}
公共IEnumerable搜索(员工高级搜索,int[]部门ID,bool showInactive,int pageSize,int?page)
{
返回_employeeRepo.Search(高级搜索、部门ID、showInactive、页面大小、页面);
}
}
单元测试:

[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);
}
[测试]
公共无效搜索应筛选活动员工()
{
var员工=新名单
{
新员工{EmployeeId=105,FirstName=“John”,LastName=“Smith”,IsActive=true},
新员工{EmployeeId=162,FirstName=“John”,LastName=“Doe”,IsActive=true},
新员工{EmployeeId=3,FirstName=“Jan”,LastName=“Doe”,IsActive=true}
};
var mockUnitOfWork=new Mock();
var sut=新员工服务(mockUnitOfWork.Object);
var employeeSearchCriteria=新员工
{
FirstName=“约翰”
};
var employeesreern=sut.Search(employeeSearchCriteria,null,false,25,1);
Assert.IsTrue(EmployeesReturn.Count()==2);
}

我认为问题在于模仿
UnitOfWork
。我收到一个
空引用异常
。如何删除
工作单元
,以便测试搜索返回的员工数量是否正确。

要模拟存储库,最简单的方法是为其创建一个界面,例如
IEEmployeeRepo
。然后在
EmployeeService
类中,字段将是
private readonly ieemployeerepo\u 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.");  
boolsearchwascall=false;
Mock repositoryMock=新建Mock();
repositoryMock.Setup(r=>r.Search(
It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny(),
It.IsAny())
.Callback(()=>searchwasCalled=true);
var mockUnitOfWork=new Mock();
mockUnitOfWork.Setup(uow=>uow.EmployeeRepository).Returns(repositoryMock.Object);
var sut=新员工服务(mockUnitOfWork.Object);
var employeeSearchCriteria=新员工
{
FirstName=“约翰”
};
sut.Search(employeeSearchCriteria,null,false,25,1);
IsTrue(searchwastcalled,“searchwastnotcalled.”);

您需要模拟
员工档案
搜索
,尤其是。。。由于副作用,您的测试所增加的价值将比您预期的要少,因为如果数据库访问是伪造的,就不会有真正的过滤。您认为创建此测试有什么意义吗?在我的存储库测试中,我已经创建了一个类似于此的测试,除了测试中的
系统
将是
EmployeeRepository
,而不是
EmployeeService
。我真的只想测试我的服务层是否可以在我的存储库中调用
Search
方法。测试它是有意义的,它不是最可能的故障点,因为基本上没有逻辑,但您可以测试您是否使用正确的参数调用
Search
。创建一个设置,仅当使用正确参数调用
Search
时才返回2名员工。如果使用了不正确的参数,
Search
将返回null,断言将失败