Pregunta La prueba de JUnit falla cuando se anota el método arg @Nonnull


¿Puede alguien explicarme por qué mi prueba JUnit falla?

  • notNullMethodTest () usos @No nulo -> éxito
  • nonnullMethodTest () usos @Nonnull -> falla

Excepción inesperada, se esperaba <java.lang.NullPointerException> pero   era <java.lang.IllegalArgumentException>

package com;

import java.util.Objects;

import javax.annotation.Nonnull;
import javax.validation.constraints.NotNull;

import org.junit.Test;

public class AnnotationTest {
  private void nonnullMethod(@Nonnull String arg) {
    Objects.requireNonNull(arg);
  }

  @Test(expected = NullPointerException.class)
  public void nonnullMethodTest() {
    nonnullMethod(null);
  }

  private void notNullMethod(@NotNull String arg) {
    Objects.requireNonNull(arg);
  }

  @Test(expected = NullPointerException.class)
  public void notNullMethodTest() {
    notNullMethod(null);
  }
}

Aquí el StackTrace:

java.lang.Exception: Unexpected exception, expected<java.lang.NullPointerException> but was<java.lang.IllegalArgumentException>

    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.IllegalArgumentException: Argument for @Nonnull parameter 'arg' of com/AnnotationTest.nonnullMethod must not be null
    at com.AnnotationTest.$$$reportNull$$$0(AnnotationTest.java)
    at com.AnnotationTest.nonnullMethod(AnnotationTest.java)
    at com.AnnotationTest.nonnullMethodTest(AnnotationTest.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
    ... 19 more

Gracias


5
2018-02-04 03:59


origen


Respuestas:


IntelliJ recientemente comenzó a generar este código de aserción de manera predeterminada. Si no desea este comportamiento, puede desactivarlo en la configuración del compilador:

Settings dialog

La configuración detrás del botón "configurar las anotaciones" le permite especificar qué anotaciones se deben tener en cuenta. Es por eso que se comporta de manera diferente cuando cambias las anotaciones.


10
2018-02-04 07:51