Add proper unit tests for bridge pattern #293
This commit is contained in:
parent
875e5b872c
commit
8367c83aca
@ -14,5 +14,9 @@
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</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