C# 模拟参数上的属性更改-使用Moq
我正在使用Moq模拟我的存储库层,以便进行单元测试 成功插入数据库时,我的存储库层插入方法将更新实体的Id属性 调用Insert方法时,如何配置moq以更新实体的Id属性 存储库代码:-C# 模拟参数上的属性更改-使用Moq,c#,tdd,mocking,moq,C#,Tdd,Mocking,Moq,我正在使用Moq模拟我的存储库层,以便进行单元测试 成功插入数据库时,我的存储库层插入方法将更新实体的Id属性 调用Insert方法时,如何配置moq以更新实体的Id属性 存储库代码:- void IAccountRepository.InsertAccount(AccountEntity account); 单元测试:- [TestInitialize()] public void MyTestInitialize() { accountRepository = new Mock&
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);
}
如果这些信息可能有点不足,我深表歉意。我今天才开始学习moq和mocking框架。ac您可以使用回调方法模拟副作用。比如:
accountRepository
.Expect(r => r.InsertAccount(account))
.Callback(() => account.ID = 1);
这是未经测试的,但它是正确的。我不确定这将如何工作,因为account是在方法内部创建的,所以当我将ID的值设置为1时,它不是我将要引用的实例 也许我的设计中存在缺陷,我应该检查IAccountRepository.InsertAccount实现中的ID>0,然后返回bool(如果可以)。不过,我在插入一个帐户时遇到了一个问题,该帐户有一个需要插入的相关对象(以及一个生成的Id) 我发现这就是我问题的答案
accountRepository
.Expect(p => p.InsertAccount(It.Is<AccountEntity>(x => x.Id == null)))
.Callback<AccountEntity>(a => a.Id = 1);
accountRepository
.Expect(p=>p.InsertAccount(It.Is(x=>x.Id==null)))
.Callback(a=>a.Id=1);
谢谢
accountRepository
.Expect(p => p.InsertAccount(It.Is<AccountEntity>(x => x.Id == null)))
.Callback<AccountEntity>(a => a.Id = 1);