JUnit test fails when annotating method arg @Nonnull


Freddy Boucher:

Can someone explain why my JUnit tests are failing:

  • notNullMethodTest() using @NotNull -> success
  • nonnullMethodTest() with @Nonnull - > fails

Unexpected exception, expected <java.lang.NullPointerException>, but got <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 is 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

Gunner:

IntelliJ has recently started generating this assertion code by default. If you don't want this to happen, you can disable it in the compiler settings:

Settings dialog

The configuration following the Configure Annotations button allows you to specify which annotations should be considered. That's why it behaves differently when you switch annotations.

Related


JUnit test fails when annotating method arg @Nonnull

Freddy Boucher: Can someone explain why my JUnit tests are failing: notNullMethodTest() using @NotNull -> success nonnullMethodTest() with @Nonnull - > fails Unexpected exception, expected <java.lang.NullPointerException>, but got <java.lang.IllegalArgumentExc

JUnit test fails with NPE when testing validator method

Sudir I am going through the following tutorial: http://docs.spring.io/docs/Spring-MVC-step-by-step/part4.html I am trying to test the validate method in the class below: public class PriceIncreaseValidator implements Validator { public void validate(Objec

JUnit test fails with NPE when testing validator method

Sudir I am working through the following tutorial: http://docs.spring.io/docs/Spring-MVC-step-by-step/part4.html I am trying to test the validate method in the class below: public class PriceIncreaseValidator implements Validator { public void validate(Obj

JUnit test fails with NPE when testing validator method

Sudir I am working through the following tutorial: http://docs.spring.io/docs/Spring-MVC-step-by-step/part4.html I am trying to test the validate method in the class below: public class PriceIncreaseValidator implements Validator { public void validate(Obj

Run a method if the test fails on Junit

Keva 161 I've added a method to my Selenium framework that takes a screenshot at the end of a test, but it doesn't run all the way to the end because some tests fail. I want to implement a rule to run this screenshot method if the test fails. It's just like: @

JUnit's LinkedList method test fails, why?

UserFuser I have this method which will search a LinkedList (named ListNode) and check for chars, and check if they contain uppercase chars, then store it in a new linked list, and return it. I wrote code for this and tested it with JUnit and it failed JUNit (

JUnit's LinkedList method test fails, why?

UserFuser I have this method which will search a LinkedList (named ListNode) and check for chars, and check if they contain uppercase chars, then store it in a new linked list, and return it. I wrote code for this and tested it with JUnit and it failed JUNit (

No such method error when creating JUnit test

IaCoder: I've tried the problem for the past two days with no luck. I just want to create an annotation based JUnit test using spring framework and hibernate. My IDE is netbeans 6.5 and I am using hibernate 3, spring 2.5.5 and JUnit 4.4. This is the error I ge

No such method error when creating JUnit test

IaCoder: I've tried the problem for the past two days with no luck. I just want to create an annotation based JUnit test using spring framework and hibernate. My IDE is netbeans 6.5 and I am using hibernate 3, spring 2.5.5 and JUnit 4.4. This is the error I ge

junit test fails with exception

Sebastian Dietrich I am using junit to test my Metrics class. When the test runs, I don't get any exceptions, but the test doesn't succeed. I've tried to find all the different questions but haven't found any. Here is its code. public class MetricsTest { pri

jUnit test on JAVA fails

k2wln I'm new here and sorry for the stupid question. I have some problems with my JUnit test: for some reason it shows me an error in index.html. I attach the link to my repository through tests and screens. Thanks! mistake: org.opentest4j.AssertionFailedErro

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

Cucumber/JUnit - How to proceed when a test fails inside a loop?

Michael: good evening, I've investigated for hours to find a solution to the following problem: I'm using Eclipse, Cucumber, JUnit and Maven. How to get a single test step to be marked as failed. I have the possibility to fail the whole scenario with try-catch

JUnit test for @override method

Brandon Bischoff: I have a program with a class below it: public class Plane implements Flyable { private final int numberOfEngines; private final String model; public Plane(int engines, String m) { numberOfEngines = engines;