View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package mockit;
7   
8   import static org.junit.jupiter.api.Assertions.assertEquals;
9   
10  import org.junit.jupiter.api.Test;
11  
12  /**
13   * The Class FakedClassWithSuperClassTest.
14   */
15  final class FakedClassWithSuperClassTest {
16  
17      /**
18       * The Class BaseClass.
19       */
20      static class BaseClass {
21          /**
22           * Do something.
23           *
24           * @return the int
25           */
26          protected int doSomething() {
27              return 123;
28          }
29      }
30  
31      /**
32       * The Class Subclass.
33       */
34      public static class Subclass extends BaseClass {
35          /**
36           * Gets the single instance of Subclass.
37           *
38           * @return single instance of Subclass
39           */
40          BaseClass getInstance() {
41              return this;
42          }
43      }
44  
45      /**
46       * The Class FakeForSubclass.
47       */
48      public static final class FakeForSubclass extends MockUp<Subclass> {
49  
50          /**
51           * Do something.
52           *
53           * @return the int
54           */
55          @Mock
56          public int doSomething() {
57              return 1;
58          }
59      }
60  
61      /**
62       * Fake only instances of the class specified to be faked.
63       */
64      @Test
65      void fakeOnlyInstancesOfTheClassSpecifiedToBeFaked() {
66          BaseClass d = new Subclass();
67          assertEquals(123, d.doSomething());
68  
69          new FakeForSubclass();
70  
71          assertEquals(1, d.doSomething());
72          assertEquals(123, new BaseClass().doSomething());
73          assertEquals(1, new Subclass().doSomething());
74          assertEquals(123, new BaseClass() {
75          }.doSomething());
76          assertEquals(1, new Subclass() {
77          }.doSomething());
78      }
79  
80      /**
81       * Fake only instances of the class specified to be faked using fake method bridge.
82       */
83      @Test
84      void fakeOnlyInstancesOfTheClassSpecifiedToBeFaked_usingFakeMethodBridge() {
85          BaseClass d = new Subclass();
86          assertEquals(123, d.doSomething());
87  
88          new MockUp<Subclass>() {
89              @Mock
90              int doSomething() {
91                  return 2;
92              }
93          };
94  
95          assertEquals(123, new BaseClass().doSomething());
96          assertEquals(2, d.doSomething());
97          assertEquals(2, new Subclass().doSomething());
98          assertEquals(123, new BaseClass() {
99          }.doSomething());
100         assertEquals(2, new Subclass() {
101         }.doSomething());
102     }
103 }