From ced317bc9dcc6158d86253d093f9c3a77ee91348 Mon Sep 17 00:00:00 2001 From: mfarid Date: Sun, 22 Nov 2015 05:46:14 +0530 Subject: [PATCH] Added UnitTest cases for factory method. --- factory-method/pom.xml | 5 ++ .../iluwatar/factory/method/ElfWeapon.java | 9 ++- .../iluwatar/factory/method/OrcWeapon.java | 9 ++- .../com/iluwatar/factory/method/Weapon.java | 6 +- .../com/iluwatar/factory/method/AppTest.java | 19 ----- .../factory/method/FactoryMethodTest.java | 79 +++++++++++++++++++ 6 files changed, 99 insertions(+), 28 deletions(-) delete mode 100644 factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java create mode 100644 factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java diff --git a/factory-method/pom.xml b/factory-method/pom.xml index 0d1e435f9..97c1c5681 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -14,5 +14,10 @@ junit test + + org.mockito + mockito-core + test + diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java index d2f38bc48..b0ff33f2b 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java @@ -1,9 +1,7 @@ package com.iluwatar.factory.method; /** - * - * ElfWeapon - * + * ElfWeapon. */ public class ElfWeapon implements Weapon { @@ -17,4 +15,9 @@ public class ElfWeapon implements Weapon { public String toString() { return "Elven " + weaponType; } + + @Override + public WeaponType getWeaponType() { + return weaponType; + } } diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java index 48cd9c5a3..e1ec0f560 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java @@ -1,9 +1,7 @@ package com.iluwatar.factory.method; /** - * - * OrcWeapon - * + * OrcWeapon. */ public class OrcWeapon implements Weapon { @@ -17,4 +15,9 @@ public class OrcWeapon implements Weapon { public String toString() { return "Orcish " + weaponType; } + + @Override + public WeaponType getWeaponType() { + return weaponType; + } } diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java index a5ae99254..3b9a80f0f 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java @@ -1,10 +1,10 @@ package com.iluwatar.factory.method; /** - * - * Weapon interface - * + * Weapon interface. */ public interface Weapon { + WeaponType getWeaponType(); + } diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java deleted file mode 100644 index cb48d9ad7..000000000 --- a/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.iluwatar.factory.method; - -import org.junit.Test; - -import com.iluwatar.factory.method.App; - -/** - * - * Application test - * - */ -public class AppTest { - - @Test - public void test() { - String[] args = {}; - App.main(args); - } -} diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java new file mode 100644 index 000000000..a6786a717 --- /dev/null +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -0,0 +1,79 @@ +package com.iluwatar.factory.method; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * The Factory Method is a creational design pattern which uses factory methods to deal with the + * problem of creating objects without specifying the exact class of object that will be created. + * This is done by creating objects via calling a factory method either specified in an interface + * and implemented by child classes, or implemented in a base class and optionally overridden by + * derived classes—rather than by calling a constructor. + * + *

Factory produces the object of its liking. + * The weapon {@link Weapon} manufactured by the + * blacksmith depends on the kind of factory implementation it is referring to. + *

+ */ +public class FactoryMethodTest { + + /** + * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test + public void testOrcBlacksmithWithSpear() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, OrcWeapon.class); + } + + /** + * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test + public void testOrcBlacksmithWithAxe() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.AXE); + verifyWeapon(weapon, WeaponType.AXE, OrcWeapon.class); + } + + /** + * Testing {@link ElfBlacksmith} to produce a SHORT_SWORD asserting that the Weapon is an + * instance of {@link ElfWeapon}. + */ + @Test + public void testElfBlacksmithWithShortSword() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); + verifyWeapon(weapon, WeaponType.SHORT_SWORD, ElfWeapon.class); + } + + /** + * Testing {@link ElfBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link ElfWeapon}. + */ + @Test + public void testElfBlacksmithWithSpear() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, ElfWeapon.class); + } + + /** + * This method asserts that the weapon object that is passed is an instance of the clazz and the + * weapon is of type expectedWeaponType. + * + * @param weapon weapon object which is to be verified + * @param expectedWeaponType expected WeaponType of the weapon + * @param clazz expected class of the weapon + */ + private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { + assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); + assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, + weapon.getWeaponType()); + } +}