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