2017-02-04 15 views
5

टिप्पणी की जाती है:JUnit परीक्षण में विफल रहता है जब विधि आर्ग कोई मुझे बता सकते हैं क्यों मेरे JUnit परीक्षण असफल @Nonnull

  • notNullMethodTest() का उपयोग करता @NotNull -> सफलता
  • nonnullMethodTest()@Nonnull का उपयोग करता है -> असफल

अनपेक्षित अपवाद, उम्मीद < java.lang.NullPointerException> लेकिन < 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); 
    } 
} 

यहाँ था 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 

धन्यवाद

+2

संभावित डुप्लिकेट [क्यों @Nonnull एनोटेशन रनटाइम पर चेक किया गया?] (Http://stackoverflow.com/questions/40847472/why-nonnull-annotation-checked-at-runtime) –

उत्तर

10

इंटेलीजे हाल ही में किया गया है डिफ़ॉल्ट रूप से इस दावे कोड उत्पन्न करना शुरू किया। आप इस व्यवहार नहीं करना चाहते हैं, तो आप इसे संकलक सेटिंग में निष्क्रिय कर सकते हैं:

Settings dialog

पीछे विन्यास "कॉन्फ़िगर एनोटेशन" बटन आप जो एनोटेशन को ध्यान में रखा जाना चाहिए निर्दिष्ट करने के लिए अनुमति देता है। यही कारण है कि जब आप एनोटेशन स्विच करते हैं तो यह अलग-अलग व्यवहार करता है।

+0

यह अच्छा जवाब है! समस्या सुलझ गयी! –

+0

मेरे लिए समस्या हल नहीं है .. – ChetanSankhala

संबंधित मुद्दे