如何更改构造函数参数?
How to change constructor arguments?
我有一个在其构造函数中执行验证的记录:
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
你非常接近。您不应该提供正在测试的 class 作为预制值;相反,您需要提供导致问题的参数,如下所示:
@Test
void Should_RespectEqualsContract() {
EqualsVerifier
.forClass(Configuration.class)
.withPrefabValues(
URI.class,
URI.create("http://a.com"),
URI.create("http://b.com"))
.verify();
}
我有一个在其构造函数中执行验证的记录:
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
你非常接近。您不应该提供正在测试的 class 作为预制值;相反,您需要提供导致问题的参数,如下所示:
@Test
void Should_RespectEqualsContract() {
EqualsVerifier
.forClass(Configuration.class)
.withPrefabValues(
URI.class,
URI.create("http://a.com"),
URI.create("http://b.com"))
.verify();
}