### Question:
IbftBlockHeightManager implements BlockHeightManager { @Override public void handleBlockTimerExpiry(final ConsensusRoundIdentifier roundIdentifier) { if (roundIdentifier.equals(currentRound.getRoundIdentifier())) { currentRound.createAndSendProposalMessage(clock.millis() / 1000); } else { LOG.trace( "Block timer expired for a round ({}) other than current ({})", roundIdentifier, currentRound.getRoundIdentifier()); } } IbftBlockHeightManager(
      final BlockHeader parentHeader,
      final IbftFinalState finalState,
      final RoundChangeManager roundChangeManager,
      final IbftRoundFactory ibftRoundFactory,
      final Clock clock,
      final MessageValidatorFactory messageValidatorFactory); @Override void handleBlockTimerExpiry(final ConsensusRoundIdentifier roundIdentifier); @Override void roundExpired(final RoundExpiry expire); @Override void handleProposalPayload(final Proposal proposal); @Override void handlePreparePayload(final Prepare prepare); @Override void handleCommitPayload(final Commit commit); @Override void handleRoundChangePayload(final RoundChange message); @Override long getChainHeight(); @Override BlockHeader getParentBlockHeader();  }### Answer:
@Test public void onBlockTimerExpiryProposalMessageIsTransmitted() { final IbftBlockHeightManager manager = new IbftBlockHeightManager( headerTestFixture.buildHeader(), finalState, roundChangeManager, roundFactory, clock, messageValidatorFactory); manager.handleBlockTimerExpiry(roundIdentifier); verify(messageTransmitter, times(1)).multicastProposal(eq(roundIdentifier), any(), any()); verify(messageTransmitter, never()).multicastPrepare(any(), any()); verify(messageTransmitter, never()).multicastPrepare(any(), any()); }