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 つのオブジェクトの値は同じですが、参照が異なるためだと思います。メモリ内に「異なる」オブジェクトが 2 つあります。これは正しいです?どうすれば修正できますか?

4

1 に答える 1

1

毎回新しいオブジェクトを挿入し、CompanyPermissionその依存関係からパラメーターを取得しないため、2 つのことが頭に浮かびます。

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 && ....)
于 2013-03-09T11:33:55.597 に答える