it-swarm.com.de

Angenommen, ein Objekt ist ein bestimmter Typ

Ist es in JUnit möglich, zu behaupten, dass ein Objekt eine Instanz einer Klasse ist? Aus verschiedenen Gründen habe ich ein Objekt in meinem Test, dessen Typ ich überprüfen möchte. Ist es ein Typ von Objekt1 oder ein Typ von Objekt2?

Derzeit habe ich:

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

Das funktioniert, aber ich habe mich gefragt, ob es eine ausdrucksstärkere Art gibt, dies zu tun.

Zum Beispiel so etwas wie:

assertObjectIsClass(myObject, Object1);

Ich könnte das machen:

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

Gibt es eine bestimmte Bestätigungsmethode, mit der ich einen Objekttyp auf elegantere, flüssigere Weise testen kann?

168
RNJ

Sie können die Methode assertThat und die in JUnit enthaltenen Matcher verwenden.

Schauen Sie sich diesen Link an, der ein wenig über die JUnit-Matcher beschreibt.

Beispiel:

public class BaseClass {
}

public class SubClass extends BaseClass {
}

Prüfung:

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

Da assertThat, das die alte Antwort war, jetzt veraltet ist, poste ich die richtige Lösung:

assertTrue(objectUnderTest instanceof TargetObject);

30
Carmageddon

Lösung für JUnit 5

In der Dokumentation heißt es:

Die Klasse org.junit.jupiter.Assertions von JUnit Jupiter bietet jedoch keine assertThat() -Methode wie die in JUnit 4 gefundene org.junit.Assert Klasse, die ein Hamcrest Matcher akzeptiert. Stattdessen wird den Entwicklern empfohlen, die integrierte Unterstützung für Matcher zu verwenden, die von Assertion-Bibliotheken von Drittanbietern bereitgestellt werden.

Beispiel für 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));
    }

}

Beispiel für 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