单元测试中新对象的引用

本文关键字:引用 对象 新对象 单元测试 | 更新日期: 2023-09-27 18:03:00

我有以下方法,我想测试与最小起订量:

public Company CreateCompany(Company company)
{
    UnitOfWork.CompanyRepository.Insert(company);
    //Give the user who created a company all permissions
    UnitOfWork.CompanyPermissionRepository.Insert(new CompanyPermission
    {
        Useraccount = UnitOfWork.UseraccountRepository.GetByID(this.GetLoggedInUseraccount(this.Context.Session).Id),
        Company = company,
        AddUser = true,
        CreateProject = true,
        DeleteCompany = true,
        DeleteFile = true,
        DownloadFile = true,
        EditCompany = true,
        ManageProjectPermission = true,
        RemoveUser = true,
        UploadFile = true
   });
   UnitOfWork.Save();
   return company;

}

我基本上想检查新的CompanyPermission对象是否被插入到存储库:

companyPermissionRepository.Verify(r => r.Insert(companyPermissions.allCompanyPermissions));

这是我的设置:

companyPermissionRepository = new Mock<IGenericRepository<CompanyPermission>>();
unitOfWork.Setup(r => r.CompanyPermissionRepository).Returns(companyPermissionRepository.Object);

我的allCompanyPermissions对象在单元测试中创建与createcompany方法相同的值,但单元测试失败。我认为这是因为两个对象有相同的值,但有不同的引用-内存中有两个对象是"不同的"。这是正确的吗?我怎么能修好它呢?

单元测试中新对象的引用

由于每次都插入一个新的CompanyPermission对象,并且它不从其依赖项中获取任何参数,因此有两件事会出现在脑海中。

你可以测试CompanyPermissionRepository.Insert是用CompanyPermission对象调用的。

companyPermissionRepository.Verify(r => r.Insert(It.IsAny<CompanyPermission>());

或者,如果你想彻底(推荐),使用Moq的It.Is

companyPermissionRepository.Verify(r => r.Insert(It.Is<CompanyPermission>(cp => cp.AddUser=true && ....)