Я новичок в насмешливости. У меня есть интеграционный тест, который я хочу изменить на модульный тест. Я знаю, что я должен mock balancePositiveCalculator, так как он сотрудничает с classUnderTest, но я не уверен, как насмехаться здесь, поэтому я только тестирую classUnderTest. Должен ли я создавать mock balancePositiveCalculator и параметры настройки и законченный возврат, а затем использовать метод mock object для расчета затрат. FeesAndInterest? Я использую moq.Как я могу сделать это тестовое тестирование интеграции с насмешкой?
[TestMethod]
public void Calculate_VirtualSaving_PositiveSaving()
{
var balance = 100M;
var monthlyRepayment = 20M;
var currentInterestRate = 18.9M;
var savingsExpected = 24M;
var fakeCreditCard = new CreditCardGold { Money = 15 };
var currentFees = _classUnderTest.Calculate(balance, currentInterestRate, monthlyRepayment, 0M, 1);
var balancePositiveCalculator = new BalancePositiveCalculator(_classUnderTest);
var costs = balancePositiveCalculator.Calculate(fakeCreditCard, balance, monthlyRepayment);
var savingsActual = currentFees.InterestPaid - costs.FeesAndInterest;
savingsActual.ShouldBeInRange(savingsExpected - 1M, savingsExpected + 1M);
}
Редактировать (Я пробовал это). Является ли это правильный подход:
var fakeCalculatorResult = new CalculatorResult
{
FeesAndInterest = 12
};
var mockBalancePositiveCalculator = new Mock<IBalancePositiveCalculator>();
mockBalancePositiveCalculator
.Setup(x => x.Calculate(It.IsAny<CreditCardGold>(), It.IsAny<decimal>(), It.IsAny<decimal>()))
.Returns(fakeCalculatorResult);
// act
var currentCreditCardCost = _classUnderTest.Calculate(balance, currentInterestRate, monthlyRepayment, 0M, 1);
var costs = mockBalancePositiveCalculator .Object.Calculate(It.IsAny<CreditCardGold>(), It.IsAny<decimal>(), It.IsAny<decimal>());
var savingsActual = currentCreditCardCost.InterestPaid - costs.FeesAndInterest;
// assert
savingsActual.ShouldBeInRange(savingsExpected - 5M, savingsExpected + 5M);
«Должен ли я создать макет из balancePositiveCalculator и параметры настройки и законченный возврат, а затем использовать метод макетного объекта для расчета затрат. FeesAndInterest? Я использую moq. " Именно это, я не уверен в точном синтаксисе в Moq, это должно быть что-то вроде 'balancePositiveCalculator = Moq.Setup()' и чем вызывать 'Calculate' на mock-объекте, как если бы это был обычный экземпляр , –
HimBromBeere
Кажется, у вас есть свои зависимости назад. Было бы разумно, если бы вы тестировали «BalancePositiveCalculator», чтобы затем издеваться над типом '_classUnderTest'. Однако в вашем сценарии просто вызовите методы непосредственно на '_classUnderTest' и удалите любой код, связанный с' BalancePositiveCalculator' –