解决方法可以通过使用不同的生成策略来避免 BeanMatchers
在尝试128次后无法生成两个不同的 java.time.Instant
类型的值。
以下是一个示例代码,使用了 BeanMatchers.custom()
方法来为 java.time.Instant
类型的属性指定生成策略:
import org.assertj.core.api.BeanMatchers;
import org.assertj.core.internal.iterables.OnlyOnceIterable;
import java.time.Instant;
public class InstantBeanMatchersExample {
public static void main(String[] args) {
BeanMatchers.registerValueGenerator(Instant.class, new InstantValueGenerator());
// 使用 BeanMatchers 来验证两个不同的 Instant 类型的值
assertThat(new MyBean()).isEqualToComparingFieldByField(new MyBean());
}
public static class MyBean {
private Instant instant;
public Instant getInstant() {
return instant;
}
public void setInstant(Instant instant) {
this.instant = instant;
}
}
public static class InstantValueGenerator implements BeanMatchers.ValueGenerator {
@Override
public OnlyOnceIterable generateValues() {
return new OnlyOnceIterable<>(Instant.EPOCH, Instant.MAX);
}
}
}
在上面的示例中,我们创建了一个自定义的 InstantValueGenerator
类,实现了 BeanMatchers.ValueGenerator
接口,并覆盖了 generateValues()
方法。在 generateValues()
方法中,我们返回了一个 OnlyOnceIterable
对象,其中包含了两个不同的 Instant
类型的值:Instant.EPOCH
和 Instant.MAX
。
然后,我们通过调用 BeanMatchers.registerValueGenerator()
方法注册我们的自定义生成策略。最后,我们使用 BeanMatchers
来验证两个不同的 MyBean
对象的 instant
属性。
这样,我们就可以避免 BeanMatchers
在尝试128次后无法生成两个不同的 java.time.Instant
类型的值。