#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();
}