1

我想结合 MOQ 测试以下方法:

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 方法中相同的值创建的,但单元测试失败。我认为这是因为这两个对象具有相同的值,但具有不同的引用——内存中有 2 个对象是“不同的”。它是否正确?我将如何解决它?

4

1 回答 1

1

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

您可以只测试CompanyPermissionRepository.InsertCompanyPermission对象调用的那个。

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

或者,如果您想要彻底(推荐),请使用最小起订量It.Is

companyPermissionRepository.Verify(r => r.Insert(It.Is<CompanyPermission>(cp => cp.AddUser=true && ....)
于 2013-03-09T11:33:55.597 回答