@Override
  public <T extends MigrationStep> MigrationStepRegistry add(long migrationNumber, String description, Class<T> stepClass) {
    validate(migrationNumber);
    requireNonNull(description, "description can't be null");
    checkArgument(!description.isEmpty(), "description can't be empty");
    requireNonNull(stepClass, "MigrationStep class can't be null");
    checkState(!migrations.containsKey(migrationNumber), "A migration is already registered for migration number '%s'", migrationNumber);
    this.migrations.put(migrationNumber, new RegisteredMigrationStep(migrationNumber, description, stepClass));
    return this;
  }
@Test
  public void add_fails_with_ISE_when_called_twice_with_same_migration_number() {
    underTest.add(12, "dsd", MigrationStep.class);

    assertThatThrownBy(() -> underTest.add(12, "dfsdf", MigrationStep.class))
      .isInstanceOf(IllegalStateException.class)
      .hasMessage("A migration is already registered for migration number '12'");
  }