public void Pass_Through_Variavle_Discounts() { //arrange Mock <IDiscountHelper> mock = new Mock <IDiscountHelper>(); mock.Setup(m => m.ApplyDiscount(It.IsAny <decimal>())).Returns <decimal>(total => total); mock.Setup(m => m.ApplyDiscount(It.Is <decimal>(v => v <= 0))).Throws <System.ArgumentOutOfRangeException>(); mock.Setup(m => m.ApplyDiscount(It.Is <decimal>(v => v > 100))).Returns <decimal>(total => (total * 0.9M)); mock.Setup(m => m.ApplyDiscount(It.IsInRange <decimal>(10, 100, Range.Inclusive))).Returns <decimal>(total => (total - 5)); var target = new LinqValueCalculyator(mock.Object); //act decimal FiveDollarDiscount = target.ValueProducts(createProduct(5)); decimal TenDollarDiscount = target.ValueProducts(createProduct(10)); decimal FiftyDollarDiscount = target.ValueProducts(createProduct(50)); decimal HundredDollarDiscount = target.ValueProducts(createProduct(100)); decimal FiveHundredDollarDiscount = target.ValueProducts(createProduct(500)); // assert Assert.AreEqual(5, FiveDollarDiscount, "$5 Fail"); Assert.AreEqual(5, TenDollarDiscount, "$10 Fail"); Assert.AreEqual(45, FiftyDollarDiscount, "$50 Fail"); Assert.AreEqual(95, HundredDollarDiscount, "$100 Fail"); Assert.AreEqual(450, FiveHundredDollarDiscount, "$500 Fail"); target.ValueProducts(createProduct(-100)); }
public void Sum_Products_Correctly() { //Arrange Mock <IDiscountHelper> mock = new Mock <IDiscountHelper>(); mock.Setup(m => m.ApplyDiscount(It.IsAny <decimal>())).Returns <decimal>(total => total); var target = new LinqValueCalculyator(mock.Object); //act var result = target.ValueProducts(products); //assert Assert.AreEqual(products.Sum(e => e.Price), result); }