BeanMatchers 在尝试 java.time.Instant 类型 128 次后无法生成两个不同的值

问题描述 投票:0回答:1

当我尝试运行以下测试时:

    @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 次后无法生成两个不同的值

有什么想法为什么我会看到这个异常以及如何修复它吗?因为,从技术上讲,测试是以正确的方式实施的。

java unit-testing junit5
1个回答
0
投票

我也遇到了同样的问题,我是这样解决的

@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()));
}
© www.soinside.com 2019 - 2024. All rights reserved.