当我尝试运行以下测试时:
@Test
public void testHash() {
BeanMatchers.registerValueGenerator(Instant::now, Instant.class);
assertThat(ClassForTest.class, hasValidBeanHashCode());
}
对于班级:
class ClassForTest {
private Instant instant;
public Instant getInstant() {
return instant;
}
public void setInstant(Instant instant) {
this.instant = instant;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ClassForTest that = (ClassForTest) o;
return Objects.equals(instant, that.instant);
}
@Override
public int hashCode() {
return Objects.hash(instant);
}
}
BeanMatchers
类来自哪里:
<dependency>
<groupId>com.google.code.bean-matchers</groupId>
<artifactId>bean-matchers</artifactId>
<version>0.14</version>
<scope>test</scope>
</dependency>
我经常遇到以下异常:
BeanMatchers 在尝试 java.time.Instant 类型 128 次后无法生成两个不同的值
有什么想法为什么我会看到这个异常以及如何修复它吗?因为,从技术上讲,测试是以正确的方式实施的。
我也遇到了同样的问题,我是这样解决的
@Test
public void testHash() {
BeanMatchers.registerValueGenerator(this::registerInstant, Instant.class);
assertThat(ClassForTest.class, hasValidBeanHashCode());
}
private Instant registerInstant() {
List<Instant> times = Arrays.asList(Instant.now(), Instant.now().minusSeconds(10));
return times.get(new Random().nextInt(times.size()));
}