在JUnit中是否可以断言一个对象是类的实例?由于各种原因,我在测试中有一个对象,我想检查它的类型。它是Object1的类型还是Object2的类型?

目前我有:

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

这是可行的,但我想知道是否有一种更有表现力的方式来做到这一点。

例如:

assertObjectIsClass(myObject, Object1);

我可以这样做:

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

是否有特定的assert方法允许我以更优雅、更流畅的方式测试对象类型?


当前回答

针对Kotlin的JUnit解决方案

对我有用的是:

assert(obj is ClassName)

例如

assert(obj is User)

注意:assert来自AssertionsJVM。kt文件

其他回答

针对Kotlin的JUnit 5解决方案!

Hamcrest的例子:

import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.junit.jupiter.api.Test

class HamcrestAssertionDemo {

    @Test
    fun assertWithHamcrestMatcher() {
        val subClass = SubClass()
        MatcherAssert.assertThat(subClass, CoreMatchers.instanceOf<Any>(BaseClass::class.java))
    }

}

AssertJ的例子:

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

class AssertJDemo {

    @Test
    fun assertWithAssertJ() {
        val subClass = SubClass()
        assertThat(subClass).isInstanceOf(BaseClass::class.java)
    }

}

JUnit 5.8的实验解决方案

在Junit 5.8中,添加了实验性的assertInstanceOf()方法,因此您不再需要Hamcrest或AssertJ。现在的解决方案很简单:

import static org.junit.jupiter.api.Assertions.assertInstanceOf;

import org.junit.Test;

public class InstanceOfTest {

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

针对Kotlin的JUnit解决方案

对我有用的是:

assert(obj is ClassName)

例如

assert(obj is User)

注意:assert来自AssertionsJVM。kt文件

由于assertThat是旧的答案,现在已弃用,我发布了正确的解决方案:

assertTrue(objectUnderTest instanceof TargetObject);

您可以使用assertThat方法和JUnit附带的Matchers。

看看这个链接,它描述了一些关于JUnit Matchers的内容。

例子:

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));
    }
}