Как изменить аргументы конструктора?

#equalsverifier

Вопрос:

У меня есть запись, которая выполняет проверку в своем конструкторе как таковую :

 public record Configuration(URI url) {
  public Configuration(URI url) {
    Validate.httpValid(url, "url");
  }
}
 

Где httpValid метод является :

 public static URI httpValid(final URI value, final String property) {
    try {
      value.toURL();
    } catch (IllegalArgumentException | MalformedURLException e) {
      throw new InvalidPropertyValueException(property, "httpValid", value, Map.of());
    }
    return value;
  }
 

Однако это не соответствует тесту, который я пытаюсь создать :

 @Test
  void Should_RespectEqualsContract() {
    EqualsVerifier
        .forClass(Configuration.class)
        .withPrefabValues(
            Configuration.class,
            new Configuration(URI.create("http://a.com")),
            new Configuration(URI.create("http://b.com")))
        .verify();
  }
 

Это происходит потому, что EqualsVerifier пытается создать объект с «x» в качестве аргумента :
InvalidPropertyValueException: The value x is not a valid httpValid as url

Ответ №1:

Вы очень близки. Вы не должны предоставлять класс, который вы тестируете, в качестве сборного значения; вместо этого вам нужно предоставить параметр, который вызывает проблемы, например:

 @Test
void Should_RespectEqualsContract() {
    EqualsVerifier
        .forClass(Configuration.class)
        .withPrefabValues(
            URI.class,
            URI.create("http://a.com"),
            URI.create("http://b.com"))
        .verify();
}