public void TestPolimorphismDynamic() { IDish tapa = new ConcreteDishTapa(); tapa.Name = "Croquetas"; tapa.Price = 8; IDish dish = new ConcreteDishFull(); dish.Name = "Croquetas"; dish.Price = 8; double normalDishPrice = dish.GetPrice(); double normalTapaPrice = tapa.GetPrice(); Assert.AreEqual(normalDishPrice, 8f); Assert.AreEqual(normalTapaPrice, 2f); //Call the same fucntion with same parameters //on diff derived classes with diff behaviour double moneyoffDishPrice = dish.GetPrice(1f); double moneyoffTapaPrice = tapa.GetPrice(1f); Assert.AreEqual(moneyoffDishPrice, 7f); Assert.AreEqual(moneyoffTapaPrice, 2f); //tapas should not apply moneyoff discounts Assert.AreEqual(moneyoffTapaPrice, normalTapaPrice); }
public void TestInheritance() { /*** SINGLE INHERITANCE ***/ //Tapa inherits attributes and methods from AbstractDish ConcreteDishTapa si_tapa = new ConcreteDishTapa(); si_tapa.Name = "Croquetas"; si_tapa.Price = 8; //Tapa inherits methods from AbstractDish //percentage discount is implemented ONLY in Abstract dish //and getprice is overriden in derived classes Assert.AreEqual(si_tapa.GetPrice(50), 1f); //An object of the derived class can be casted to it base class Assert.IsTrue(si_tapa is AbstractDish); /*** HIERARCHICAL INHERITANCE ***/ //Tapa, halfdish and dish inherits from AbstractDish ConcreteDishTapa hi_tapa = new ConcreteDishTapa(); ConcreteDishHalf hi_halfdish = new ConcreteDishHalf(); ConcreteDishFull hi_dish = new ConcreteDishFull(); Assert.IsTrue(hi_tapa is AbstractDish); Assert.IsTrue(hi_halfdish is AbstractDish); Assert.IsTrue(hi_dish is AbstractDish); /*** MULTILEVEL INHERITANCE ***/ //Tapa inherits from AbstractDish //which inherits from AbstractIdentity ConcreteDishTapa mi_tapa = new ConcreteDishTapa(); mi_tapa.Id = 1; Assert.IsTrue(mi_tapa is AbstractDish); AbstractDish mi_dish = mi_tapa; Assert.IsTrue(mi_dish is AbstractedIdentity); Assert.IsTrue(mi_tapa is AbstractedIdentity); /*** MULTIPLE INHERITANCE ***/ //AbstractDish inherits from AbstractIdentity and IDish ConcreteDishTapa mmi_tapa = new ConcreteDishTapa(); Assert.IsTrue(mmi_tapa is IDish); Assert.IsTrue(mmi_tapa is AbstractedIdentity); }