• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2017 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 package org.mockitousage.bugs;
6 
7 import org.junit.Test;
8 import org.mockito.Mock;
9 import org.mockitousage.IMethods;
10 import org.mockitoutil.TestBase;
11 
12 import static org.junit.Assert.fail;
13 import static org.mockito.Mockito.when;
14 
15 /**
16  * These tests check that ThrowsException#answer throws an instance returned
17  * by Throwable#fillInStackTrace of the provided throwable.
18  *
19  * <p>A well-behaved Throwable implementation must always return a reference to this
20  * from #fillInStackTrace according to the method contract.
21  * However, Mockito throws the exception returned from #fillInStackTrace for backwards compatibility
22  * (or the provided exception if the method returns null).
23  *
24  * @see Throwable#fillInStackTrace()
25  * @see <a href="https://github.com/mockito/mockito/issues/866">#866</a>
26  */
27 public class FillInStackTraceScenariosTest extends TestBase {
28 
29     @Mock IMethods mock;
30 
31     private class SomeException extends RuntimeException {}
32 
33     class NullStackTraceException extends RuntimeException {
fillInStackTrace()34         public Exception fillInStackTrace() {
35             return null;
36         }
37     }
38 
39     class NewStackTraceException extends RuntimeException {
fillInStackTrace()40         public Exception fillInStackTrace() {
41             return new SomeException();
42         }
43     }
44 
45     //issue 866
46     @Test
avoids_NPE()47     public void avoids_NPE() {
48         when(mock.simpleMethod()).thenThrow(new NullStackTraceException());
49         try {
50             mock.simpleMethod();
51             fail();
52         } catch(NullStackTraceException e) {}
53     }
54 
55     @Test
uses_return_value_from_fillInStackTrace()56     public void uses_return_value_from_fillInStackTrace() {
57         when(mock.simpleMethod()).thenThrow(new NewStackTraceException());
58         try {
59             mock.simpleMethod();
60             fail();
61         } catch(SomeException e) {}
62     }
63 }
64