Add proper unit tests for bridge pattern #293
This commit is contained in:
parent
875e5b872c
commit
8367c83aca
@ -14,5 +14,9 @@
|
|||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user