参考

2013-03-09 94 views
1

我有以下方法,我想在组合来测试与起订量:参考

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

由于您每次都插入一个新的CompanyPermission对象,并且它没有从其依赖关系中获取任何参数,所以想到两件事情。

您可以测试CompanyPermissionRepository.Insert是否与CompanyPermission对象一起被调用。

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

或者,如果你想成为彻底的(推荐),最小起订量使用的It.Is

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

非常感谢你。将按照你的建议。 :) – mosquito87 2013-03-09 12:00:51