在单元测试中引用新对象

时间:2013-03-09 11:24:31

标签: c# unit-testing moq

我有以下方法,我想与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方法相同的值,但单元测试失败。我认为这是因为两个对象具有相同的值,但具有不同的引用 - 在内存中有两个对象是“不同的”。它是否正确?我怎么能解决它?

1 个答案:

答案 0 :(得分:1)

由于您每次都要插入一个新的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 && ....)