加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Moq模拟参数的属性更改

发布时间:2020-12-16 01:29:05 所属栏目:百科 来源:网络整理
导读:我正在使用Moq来模拟我的Repository层,所以我可以进行单元测试. 我的存储库层插入方法在发生成功的数据库插入时更新我的??实体的Id属性. 在调用Insert方法时,如何配置moq以更新实体的Id属性? 存储库代码: – void IAccountRepository.InsertAccount(Accoun
我正在使用Moq来模拟我的Repository层,所以我可以进行单元测试.

我的存储库层插入方法在发生成功的数据库插入时更新我的??实体的Id属性.

在调用Insert方法时,如何配置moq以更新实体的Id属性?

存储库代码: –

void IAccountRepository.InsertAccount(AccountEntity account);

单元测试:-

[TestInitialize()]
public void MyTestInitialize() 
{
    accountRepository = new Mock<IAccountRepository>();
    contactRepository = new Mock<IContactRepository>();
    contractRepository = new Mock<IContractRepository>();
    planRepository = new Mock<IPlanRepository>();
    generator = new Mock<NumberGenerator>();

    service = new ContractService(contractRepository.Object,accountRepository.Object,planRepository.Object,contactRepository.Object,generator.Object);   
}


[TestMethod]
public void SubmitNewContractTest()
{
    // Setup Mock Objects
    planRepository
        .Expect(p => p.GetPlan(1))
        .Returns(new PlanEntity() { Id = 1 });

    generator
        .Expect(p => p.GenerateAccountNumber())
        .Returns("AC0001");

    // Not sure what to do here? 
    // How to mock updating the Id field for Inserts?
    //                                                 
    // Creates a correctly populated NewContractRequest instance
    NewContractRequest request = CreateNewContractRequestFullyPopulated();

    NewContractResponse response = service.SubmitNewContract(request);
    Assert.IsTrue(response.IsSuccessful);
}

ContractService类(WCF服务合同)的实现片段.

AccountEntity account = new AccountEntity()
{
    AccountName = request.Contact.Name,AccountNumber = accountNumber,BillingMethod = BillingMethod.CreditCard,IsInvoiceRoot = true,BillingAddressType = BillingAddressType.Postal,ContactId = request.Contact.Id.Value
};

accountRepository.InsertAccount(account);
if (account.Id == null)
{
    // ERROR
}

如果这些信息可能有点缺乏,我深表歉意.我今天才开始学习moq和模拟框架. AC

解决方法

您可以使用Callback方法来模拟副作用.就像是:

accountRepository
    .Expect(r => r.InsertAccount(account))
    .Callback(() => account.ID = 1);

这是未经测试的,但它是沿着正确的路线.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读