public void CalculateCostOfOverweightedParcel() { var costCalculator = new OrderDeliveryCostCalculator( _sizeCalculatorMock.Object, _parcelCostCalculatorMock.Object, _weightLimitCalculatorMock.Object, _overweightFeeCalculatorMock.Object); var overweightedParcel = new Parcel(new ParcelSize(1, 1, 1), 10); var overweightFee = 5m; var weightLimit = 5; _sizeCalculatorMock.Setup(c => c.CalculateParcelSizeFactor(It.IsAny <ParcelSize>())).Returns(ParcelSizeFactor.Small); _parcelCostCalculatorMock.Setup(c => c.CalculateDeliveryCost(It.IsAny <ParcelSizeFactor>())).Returns(0); _weightLimitCalculatorMock.Setup(c => c.CalculateWeightLimit(It.IsAny <ParcelSizeFactor>())).Returns(weightLimit); _overweightFeeCalculatorMock.Setup(c => c.CalculateOverWeightFee(It.IsAny <ParcelSizeFactor>())).Returns(overweightFee); var deliverCost = costCalculator.CalculateParcelCost(overweightedParcel); Assert.AreEqual((overweightedParcel.Weight - weightLimit) * overweightFee, deliverCost); }