### Question:
LoggingListener implements TableReplicationListener, LocomotiveListener, SourceCatalogListener,
    ReplicaCatalogListener, CopierListener { @Override public void tableReplicationFailure(EventTableReplication tableReplication, String eventId, Throwable t) { if (sourceCatalog != null && replicaCatalog != null) { LOG .error("[{}] Failed to replicate '{}:{}' to '{}:{}' with error '{}'", eventId, sourceCatalog.getName(), tableReplication.getSourceTable().getQualifiedName(), replicaCatalog.getName(), tableReplication.getQualifiedReplicaName(), t.getMessage()); } }  @Override void tableReplicationStart(EventTableReplication tableReplication, String eventId); @Override void tableReplicationSuccess(EventTableReplication tableReplication, String eventId); @Override void tableReplicationFailure(EventTableReplication tableReplication, String eventId, Throwable t); @Override void circusTrainStartUp(String[] args, EventSourceCatalog sourceCatalog, EventReplicaCatalog replicaCatalog); @Override void resolvedMetaStoreSourceTable(EventTable table); @Override void partitionsToCreate(EventPartitions partitions); @Override void partitionsToAlter(EventPartitions partitions); @Override void copierEnd(Metrics metrics); @Override void circusTrainShutDown(CompletionCode completionCode, Map<String, Long> metrics); @Override void resolvedSourcePartitions(EventPartitions partitions); @Override void resolvedSourceLocation(URI location); @Override void resolvedReplicaLocation(URI location); @Override void existingReplicaPartitions(EventPartitions partitions); @Override void deprecatedReplicaLocations(List<URI> locations); @Override void copierStart(String copierImplementation);  }### Answer:
@Test public void failureWithoutStartOrSuccessDoesntThrowException() { Throwable throwable = new Throwable("Test"); listener.tableReplicationFailure(tableReplication, "event-id", throwable); }