it-swarm.com.ru

Утвердить объект определенного типа

Можно ли в JUnit утверждать, что объект является экземпляром класса? По разным причинам в моем тесте есть объект, который я хочу проверить тип. Это тип Object1 или тип Object2?

В настоящее время у меня есть:

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

Это работает, но мне было интересно, есть ли более выразительный способ сделать это.

Например что-то вроде:

assertObjectIsClass(myObject, Object1);

Я мог бы сделать это:

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

Есть ли конкретный метод подтверждения, который позволяет мне проверять тип объекта более элегантным и гибким способом?

159
RNJ

Вы можете использовать метод assertThat и Matchers, которые идут с JUnit.

Взгляните на эта ссылка , в которой немного рассказывается о 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));
    }
}
218
maba

Поскольку assertThat, который был старым ответом, теперь устарел, я выкладываю правильное решение:

assertTrue(objectUnderTest instanceof TargetObject);

27
Carmageddon

Решение для JUnit 5

В документации сказано:

Однако класс JUnit Jupiter org.junit.jupiter.Assertions не предоставляет метод assertThat() , подобный методу, найденному в классе org.junit.Assert JUnit 4, который принимает 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);
    }

}
8
Franklin Yu