JUnit error when annotating arg @Nonnull method

Can someone explain to me why my JUnit test does not work:

  • notNullMethodTest () uses @NotNull -> success
  • nonnullMethodTest () uses @Nonnull -> fail

Unexpected exception expected by <java.lang.NullPointerException>, but was <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); } } 

Here's the 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 

thanks

+5
source share
1 answer

IntelliJ recently started generating this default approval code. If you do not want this behavior, you can disable it in the compiler settings:

Settings Dialog

The Configure Annotations button configuration allows you to specify which annotations to consider. Therefore, when switching annotations, it behaves differently.

+10
source

Source: https://habr.com/ru/post/1263810/


All Articles