断言的对象是特定类型的(Assert an object is a specific type)

2019-06-28 07:30发布

是否有可能在JUnit的断言对象是一个类的实例? 由于各种原因,我在我的测试对象,我要检查的类型。 它是一个类型Object1或一类对象2的?

目前,我有:

assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);

这工作,但我不知道是否有这样做的更多的表达方式。

例如是这样的:

assertObjectIsClass(myObject, Object1);

我可以这样做:

assertEquals(myObject.class, Object1.getClass());

有没有具体的断言方法,让我以更优雅,流畅的方式测试对象的类型?

Answer 1:

您可以使用assertThat方法和随之而来的JUnit匹配器。

看看这个链接是介绍有关的JUnit匹配器一点点。

例:

public class BaseClass {
}

public class SubClass extends BaseClass {
}

测试:

import org.junit.Test;

import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;

/**
 * @author maba, 2012-09-13
 */
public class InstanceOfTest {

    @Test
    public void testInstanceOf() {
        SubClass subClass = new SubClass();
        assertThat(subClass, instanceOf(BaseClass.class));
    }
}


Answer 2:

由于assertThat这是旧的答案是现在已经过时,我张贴正确的解决方案:

assertTrue(objectUnderTest instanceof TargetObject);



Answer 3:

解决方案的JUnit 5

该文件说:

然而,JUnit的木星的org.junit.jupiter.Assertions类不提供一个assertThat()像在JUnit 4的发现方法org.junit.Assert类,它接受一个Hamcrest Matcher 。 相反,我们鼓励开发者使用第三方断言库提供的匹配器的内置支持。

例如用于Hamcrest :

import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.jupiter.api.Test;

class HamcrestAssertionDemo {

    @Test
    void assertWithHamcrestMatcher() {
        SubClass subClass = new SubClass();
        assertThat(subClass, instanceOf(BaseClass.class));
    }

}

例如用于AssertJ :

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;

class AssertJDemo {

    @Test
    void assertWithAssertJ() {
        SubClass subClass = new SubClass();
        assertThat(subClass).isInstanceOf(BaseClass.class);
    }

}


文章来源: Assert an object is a specific type