단위 테스트를 할 수 있도록 Moq를 사용하여 저장소 계층을 조롱했습니다.Moch를 사용하여 매개 변수에 대한 속성 변경 조롱
내 리포지토리 레이어 Insert 메서드는 성공적인 db 삽입이 발생할 때 내 엔터티의 Id 속성을 업데이트합니다.
Insert 메서드가 호출 될 때 moq가 엔터티의 Id 속성을 업데이트하도록 구성하려면 어떻게해야합니까?
저장소 코드 : -
void IAccountRepository.InsertAccount(AccountEntity account);
단위 테스트 : - ContractService 클래스 (WCF 서비스 계약)에서
[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);
}
구현 조각.
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
감사합니다. 도움이되었습니다. – BigOmar