diff --git a/bridge/pom.xml b/bridge/pom.xml
index db2f0d340..10b763eab 100644
--- a/bridge/pom.xml
+++ b/bridge/pom.xml
@@ -14,5 +14,9 @@
junit
test
+
+ org.mockito
+ mockito-core
+
diff --git a/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java
new file mode 100644
index 000000000..a7a2d1536
--- /dev/null
+++ b/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java
@@ -0,0 +1,33 @@
+package com.iluwatar.bridge;
+
+import org.junit.Test;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+/**
+ * Date: 12/6/15 - 11:15 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class BlindingMagicWeaponTest extends MagicWeaponTest {
+
+ /**
+ * Invoke all possible actions on the weapon and check if the actions are executed on the actual
+ * underlying weapon implementation.
+ */
+ @Test
+ public void testExcalibur() throws Exception {
+ final Excalibur excalibur = spy(new Excalibur());
+ final BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon(excalibur);
+
+ testBasicWeaponActions(blindingMagicWeapon, excalibur);
+
+ blindingMagicWeapon.blind();
+ verify(excalibur, times(1)).blindImp();
+ verifyNoMoreInteractions(excalibur);
+ }
+
+}
diff --git a/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java
new file mode 100644
index 000000000..55b89bb36
--- /dev/null
+++ b/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java
@@ -0,0 +1,33 @@
+package com.iluwatar.bridge;
+
+import org.junit.Test;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+/**
+ * Date: 12/6/15 - 11:26 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class FlyingMagicWeaponTest extends MagicWeaponTest {
+
+ /**
+ * Invoke all possible actions on the weapon and check if the actions are executed on the actual
+ * underlying weapon implementation.
+ */
+ @Test
+ public void testMjollnir() throws Exception {
+ final Mjollnir mjollnir = spy(new Mjollnir());
+ final FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon(mjollnir);
+
+ testBasicWeaponActions(flyingMagicWeapon, mjollnir);
+
+ flyingMagicWeapon.fly();
+ verify(mjollnir, times(1)).flyImp();
+ verifyNoMoreInteractions(mjollnir);
+ }
+
+}
\ No newline at end of file
diff --git a/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java
new file mode 100644
index 000000000..eb7bfb34e
--- /dev/null
+++ b/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java
@@ -0,0 +1,42 @@
+package com.iluwatar.bridge;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+/**
+ * Date: 12/6/15 - 11:28 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public abstract class MagicWeaponTest {
+
+ /**
+ * Invoke the basic actions of the given weapon, and test if the underlying weapon implementation
+ * is invoked
+ *
+ * @param weaponImpl The spied weapon implementation where actions are bridged to
+ * @param weapon The weapon, handled by the app
+ */
+ protected final void testBasicWeaponActions(final MagicWeapon weapon,
+ final MagicWeaponImpl weaponImpl) {
+ assertNotNull(weapon);
+ assertNotNull(weaponImpl);
+ assertNotNull(weapon.getImp());
+
+ weapon.swing();
+ verify(weaponImpl, times(1)).swingImp();
+ verifyNoMoreInteractions(weaponImpl);
+
+ weapon.wield();
+ verify(weaponImpl, times(1)).wieldImp();
+ verifyNoMoreInteractions(weaponImpl);
+
+ weapon.unwield();
+ verify(weaponImpl, times(1)).unwieldImp();
+ verifyNoMoreInteractions(weaponImpl);
+
+ }
+
+}
diff --git a/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java
new file mode 100644
index 000000000..2d9c24083
--- /dev/null
+++ b/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java
@@ -0,0 +1,33 @@
+package com.iluwatar.bridge;
+
+import org.junit.Test;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+/**
+ * Date: 12/6/15 - 11:43 PM
+ *
+ * @author Jeroen Meulemeester
+ */
+public class SoulEatingMagicWeaponTest extends MagicWeaponTest {
+
+ /**
+ * Invoke all possible actions on the weapon and check if the actions are executed on the actual
+ * underlying weapon implementation.
+ */
+ @Test
+ public void testStormBringer() throws Exception {
+ final Stormbringer stormbringer = spy(new Stormbringer());
+ final SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon(stormbringer);
+
+ testBasicWeaponActions(soulEatingMagicWeapon, stormbringer);
+
+ soulEatingMagicWeapon.eatSoul();
+ verify(stormbringer, times(1)).eatSoulImp();
+ verifyNoMoreInteractions(stormbringer);
+ }
+
+}
\ No newline at end of file