【问题标题】:How to test equality between class objects using FEST assertThat(...) method?如何使用 FEST assertThat(...) 方法测试类对象之间的相等性?
【发布时间】:2026-01-20 11:35:01
【问题描述】:

如何使用 FEST assertThat(...) 方法测试类对象是否相等?

例子:

import static org.fest.assertions.api.Assertions.assertThat; 

@Test
public void test() throws Exception {
    assertThat(findClass()).isEqualTo(Integer.class);
}

private Class<?> findClass() {
    // logic for finding a class object
    return String.class;
}

以上内容无法编译。 isEqualTo 方法抱怨。我应该使用其他方法来测试类对象之间的相等性吗?

【问题讨论】:

    标签: java junit4 fest assertj


    【解决方案1】:

    首先你应该使用AssertJ;这个包已经过时了 FEST。但由于 AssertJ 共享类似的语法,因此转换会很容易。

    其次,好吧,使用 AssertJ,这是开箱即用的......这对我来说是编译的:

    // irrelevant code, then
        assertThat(findClass()).isEqualTo(Integer.class);
    }
    
    private Class<?> findClass()
    {
        return Integer.class;
    }
    

    那么,也许您还有其他问题?

    【讨论】:

    • 没问题 ;) 注意因为Class&lt;?&gt; "instances" 是单例,你可以使用.isSameAs()
    【解决方案2】:

    如果您使用 assertJ,正确的方法是使用 isInstanceOf() 方法。尽可能使用更具体的 assertJ 匹配器。它们更具语义性,并提供更好的错误结果。

    http://joel-costigliola.github.io/assertj/core/api/org/assertj/core/api/Assert.html#isInstanceOf(java.lang.Class)

        assertThat(object).isInstanceOf(Foo.class);
    

    【讨论】: