3

I am writing a JUnit test cases using Mockito. I have populated a list using reflection with mock objects of IIOImage class of java. Though my list has objects, my test case is failing and I am getting a null pointer exception. Can anyone help?

_sourceList=(List) Whitebox.getInternalState(OneClass, "_sourceListContent");

_sourceList.add(Mockito.mock(IIOImage.class)); 
_sourceList.add(Mockito.mock(IIOImage.class));
Field listfield=OneClass.class.getDeclaredField("_sourceListContent");
listfield.setAccessible(true);
listfield.set(oneclass, _sourceImages);
System.out.println(_sourceList.size()+"is size");

for(int i=0;i<=_sourceImages.size(); i++) //this loop is giving null
{   
      IIOImage img = (IIOImage)_sourceImages.get(i);
      SomeClass data=Mockito.mock(SomeClass.class);
      data=(SomeClass)img.getMetadata();
      data.dumpData();
}

It returns the size here, but causes problem when I run the test case saying null pointer.

here's the stack trace

java.lang.NullPointerException
at SomeClass.SomeClassTest.dumpRequestTest(IPRequestTest.java:285)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
2
  • 2
    Please add the stacktrace. Commented Feb 9, 2017 at 15:32
  • I have added the stack trace Commented Feb 9, 2017 at 16:22

1 Answer 1

3

You are creating instances as mocks:

_sourceList.add(Mockito.mock(IIOImage.class)); 

Later on you retireive them one by one and call this method on each:

IIOImage img = (IIOImage)_sourceImages.get(i);
data=(SomeClass)img.getMetadata();

You have not declared what Mockito should return when this method is called (using the when(..).thenReturn(..) syntax), thus Mockito returns a default null value.

When you then call the:

data.dumpData();

You get a NullPointerException as data is null.

Fix

  • Declare what should be return by when(img.getMetadata()).thenReturn(..).
  • Use Mockito.spy instead of mock.
Sign up to request clarification or add additional context in comments.

8 Comments

Thanks for the suggesstion, but Mockito.spy is not working for me and throwing a new set of exceptions. img.getMetadata() is returning null when I call It. Is it because of this I am facing problem?
You have to declare the returned value then..when(img.getMetadata()).thenReturn(/* some instance */)
It's not working out. because of that null value returned by data.dumpData() My test case is failing and returning NullPointerException.
Whats inside data.dumpData();? I dont see you assigning the return value of this method to any variable. Maybe post the whole test so we dont miss anything..
public void dumpData() { NodeList childNodes = _root.getChildNodes(); for(int i=0;i<childNodes.getLength(); i++) { Element elem = (Element) childNodes.item(i); String node = elem.getNodeName(); } }
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.