web-dev-qa-db-fra.com

Test JUnit pour assertEqual NullPointerException

Je ne sais pas pourquoi le scénario de test n'a pas de sortie de true. Les deux cas doivent donner un NullPointerException.

J'ai essayé de faire cela (pas exactement le même mais il donne et produit true):

    String nullStr = null;

//@Test
public int NullOutput1() {
    nullStr.indexOf(3);
    return 0;
}

//@Test(expected=NullPointerException.class)
public int NullOutput2() {
    nullStr.indexOf(2);
    return 0;
}

@Test(expected=NullPointerException.class)
public void testboth() {
    assertEquals(NullOutput1(), NullOutput2());
}

Coureur:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunnerStringMethods {
    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(TestJunitMyIndexOf.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println(result.wasSuccessful());
    }
}

Méthode:

public static int myIndexOf(char[] str, int ch, int index) {
        if (str == null) {
            throw new NullPointerException();
        }
        // increase efficiency
        if (str.length <= index || index < 0) {
            return -1;
        }
        for (int i = index; i < str.length; i++) {
            if (index == str[i]) {
                return i;
            }
        }
        // if not found
        return -1;
    }

Cas de test:

@Test(expected=NullPointerException.class)
public void testNullInput() {
    assertEquals(nullString.indexOf(3), StringMethods.myIndexOf(null, 'd',3));
}
12
Liondancer

Je pense que vous voulez utiliser fail ici:

@Test(expected=NullPointerException.class)
public void testNullInput() {
    fail(nullString.indexOf(3));
}

Assurez-vous d'ajouter import static org.junit.Assert.fail; Si tu as besoin de.

20
David Koelle

Dans Java 8 et JUnit 5 (Jupiter), nous pouvons affirmer les exceptions comme suit. En utilisant org.junit.jupiter.api.Assertions.assertThrows

public static <T étend Throwable> T assertThrows (Class <T> attenduType, exécutable exécutable)

Affirme que l'exécution de l'exécutable fourni lève une exception du type attendu et renvoie l'exception.

Si aucune exception n'est levée ou si une exception d'un type différent est levée, cette méthode échouera.

Si vous ne souhaitez pas effectuer de vérifications supplémentaires sur l'instance d'exception, ignorez simplement la valeur de retour.

@Test
public void itShouldThrowNullPointerExceptionWhenBlahBlah() {
    assertThrows(NullPointerException.class,
            ()->{
            //do whatever you want to do here
            //ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null);
            });
}

Cette approche utilisera l'interface fonctionnelle Executable dans org.junit.jupiter.api.

Référer :

4
prime