私は嘲笑するのが初めてです。私は単位テストに変更したい統合テストをしています。 balancePositiveCalculatorは、classUnderTestとの依存関係に協力しているので、私は黙らせなければならないことを知っていますが、私はここでどのように偽装するのか分かりませんので、classUnderTestをテストしています。私はbalancePositiveCalculatorと設定パラメータと缶詰の戻り値の模擬を作成し、次に擬似オブジェクトメソッドを使用してコストを計算する必要がありますか?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と設定パラメータとcanned returnを使用して、モックオブジェクトメソッドを使用してコストを計算します.FeesAnterest?moqを使用しています。正確には、私はMoqの正確な構文については分かりませんが、それは 'balancePositiveCalculator = Moq.Setup()'のようなものでなければならず、通常のインスタンスのように模擬オブジェクトの 'Calculate' 。 –
HimBromBeere
あなたはあなたの依存関係を先頭に戻しているようです。 'BalancePositiveCalculator'をテストして' _classUnderTest'の型を模倣していれば意味があります。しかし、あなたのシナリオでは、メソッドを '_classUnderTest'で直接呼び出し、' BalancePositiveCalculator'に関連するコードを削除してください。 –