web-dev-qa-db-fra.com

Assert un objet est un type spécifique

Est-il possible dans JUnit d'affirmer qu'un objet est une instance d'une classe? Pour diverses raisons, je souhaite vérifier le type d’objet dans mon test. Est-ce un type d'objet1 ou un type d'objet2?

Actuellement j'ai:

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

Cela fonctionne, mais je me demandais s’il existait un moyen plus expressif de le faire.

Par exemple, quelque chose comme:

assertObjectIsClass(myObject, Object1);

Je pourrais faire ceci:

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

Existe-t-il une méthode d’assertion spécifique qui me permet de tester un type d’objet de manière plus élégante et plus fluide?

168
RNJ

Vous pouvez utiliser la méthode assertThat et les Matchers fournis avec JUnit.

Jetez un coup d'œil à ce lien qui décrit un peu les JNP Matchers.

Exemple:

public class BaseClass {
}

public class SubClass extends BaseClass {
}

Tester:

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

Puisque assertThat qui était l'ancienne réponse est maintenant obsolète, je publie la solution correcte:

assertTrue(objectUnderTest instanceof TargetObject);

30
Carmageddon

Solution pour JUnit 5

La documentation dit:

Cependant, la classe org.junit.jupiter.Assertions de JUnit Jupiter ne fournit pas de méthode assertThat() comme celle trouvée dans JUnit 4 org.junit.Assert class qui accepte un Hamcrest Matcher . Au lieu de cela, les développeurs sont encouragés à utiliser le support intégré pour les agents de correspondance fourni par les bibliothèques d'assertions tierces.

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

}
_

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

}
_
14
Franklin Yu