title: Mockito doesn't throw correct exception when using doThrow on a spy
body: <p>I'm using PowerMock (Mockito) to mock a subcall to another method in the same class. More specifically I have something like this:</p>
  
  <pre><code>public class myClass{
      public void MyMethod1(){
          //do something
          try{
              myMethod2();
          } catch (MyExceptionType e) {
              //do something
              throw e;
          }
      }
  
      public int MyMethod2() throws MyExceptionType {...}
  }
  </code></pre>
  
  <p>Now in my unit tests, I'm able to mock responses of MyMethod2 using a spy, and doing something like <code>doReturn(1).when(myClass).myMethod2()</code>. However, something strange happens when I do something like this: <code>doThrow(myExeptionType).when(myClass).myMethod2()</code>. When I call myClass.myMethod1() during my test, it throws a NullPointerException, but the strange bit is that if I use a debugger and inspect <code>throw e</code>, e is the correct exception of type MyExceptionType.</p>
  
  <p>Here's the stack trace of that NullPointerException:</p>
  
  <pre><code>java.lang.NullPointerException
      at java.util.Arrays$ArrayList.&lt;init&gt;(Arrays.java:2842)
      at java.util.Arrays.asList(Arrays.java:2828)
      at org.mockito.internal.exceptions.stacktrace.StackTraceFilter.filter(StackTraceFilter.java:31)
      at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.filter(ConditionalStackTraceFilter.java:23)
      at org.mockito.internal.invocation.realmethod.FilteredCGLIBProxyRealMethod.invoke(FilteredCGLIBProxyRealMethod.java:29)
      at org.mockito.internal.invocation.InvocationImpl.callRealMethod(InvocationImpl.java:108)
      at org.mockito.internal.stubbing.answers.CallsRealMethods.answer(CallsRealMethods.java:36)
      at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:93)
      at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
      at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:38)
      at org.mockito.internal.creation.MethodInterceptorFilter.intercept(MethodInterceptorFilter.java:51)
      at com.amazon.inventory.workflow.common.wrapper.FCContainerServiceWrapper$$EnhancerByMockitoWithCGLIB$$a0f00456.getContainerHierarchyDown(&lt;generated&gt;)
      at com.amazon.inventory.workflow.common.wrapper.containerservice.GetContainerHierarchyDownTest.runTest(GetContainerHierarchyDownTest.java:50)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
      at org.powermock.modules.junit4.rule.PowerMockStatement.evaluate(PowerMockRule.java:49)
      at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:110)
      at org.junit.rules.RunRules.evaluate(RunRules.java:18)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
      at org.junit.runners.Suite.runChild(Suite.java:128)
      at org.junit.runners.Suite.runChild(Suite.java:24)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:148)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
  </code></pre>
  
  <p>Hopefully my question is not too confusing, thanks!</p>