Player player1 = new Player(); Player player2 = new Player(); Weapon weapon = new Weapon(); Fight fight = new Fight(player1, player2); fight.attack(player1, weapon); fight.attack(player1, weapon); fight.attack(player1, weapon); State state = fight.getState(); assertThat(state.isFinished(), is(true)); } }
state = new State(); private Player player1, player2; private final PlayerUpdater updater; public Fight(Player player1, Player player2) { this(player1, player2, new PlayerUpdaterImpl()); } protected Fight(Player player1, Player player2, PlayerUpdater updater) { this.player1 = player1; this.player2 = player2; this.updater = updater; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHealth(opponent.getHealth() - damage); updater.updatePlayer(opponent); updateState(); } } ) ) . I U B D ( I ( ( I F
testAttack() { Player player1 = new Player(); Player player2 = new Player(); Weapon weapon = new Weapon(); // PlayerUpdater PlayerUpdater updater = mock(PlayerUpdater.class); // Fight Fight fight = new Fight(player1, player2, updater); fight.registerHit(player1, weapon); fight.registerHit(player1, weapon); fight.registerHit(player1, weapon); State state = fight.getState(); assertThat(state.isFinished(), is(true)); // updatePlayer() 3 verify(updater, times(3)).updatePlayer(player2); } } M . F P U F