1 /*
2  * Copyright (c) 2007 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 
6 package org.mockitousage.misuse;
7 
8 import org.junit.After;
9 import org.junit.Test;
10 import org.mockito.InOrder;
11 import org.mockito.Mock;
12 import org.mockito.exceptions.base.MockitoException;
13 import org.mockito.exceptions.misusing.MissingMethodInvocationException;
14 import org.mockitousage.IMethods;
15 import org.mockitoutil.TestBase;
16 
17 import static org.junit.Assume.assumeFalse;
18 import static org.mockito.Mockito.*;
19 
20 public class InvalidUsageTest extends TestBase {
21 
22     @Mock private IMethods mock;
23     @Mock private IMethods mockTwo;
24 
25     @After
resetState()26     public void resetState() {
27         super.resetState();
28     }
29 
30     @Test(expected=MockitoException.class)
shouldRequireArgumentsWhenVerifyingNoMoreInteractions()31     public void shouldRequireArgumentsWhenVerifyingNoMoreInteractions() {
32         verifyNoMoreInteractions();
33     }
34 
35     @Test(expected=MockitoException.class)
shouldRequireArgumentsWhenVerifyingZeroInteractions()36     public void shouldRequireArgumentsWhenVerifyingZeroInteractions() {
37         verifyZeroInteractions();
38     }
39 
40     @SuppressWarnings({"CheckReturnValue", "MockitoUsage"})
41     @Test(expected=MockitoException.class)
shouldNotCreateInOrderObjectWithoutMocks()42     public void shouldNotCreateInOrderObjectWithoutMocks() {
43         inOrder();
44     }
45 
46     @Test(expected=MockitoException.class)
shouldNotAllowVerifyingInOrderUnfamilarMocks()47     public void shouldNotAllowVerifyingInOrderUnfamilarMocks() {
48         InOrder inOrder = inOrder(mock);
49         inOrder.verify(mockTwo).simpleMethod();
50     }
51 
52     @Test(expected=MissingMethodInvocationException.class)
shouldReportMissingMethodInvocationWhenStubbing()53     public void shouldReportMissingMethodInvocationWhenStubbing() {
54         when(mock.simpleMethod()).thenReturn("this stubbing is required to make sure Stubbable is pulled");
55         when("".toString()).thenReturn("x");
56     }
57 
58     @Test(expected=MockitoException.class)
shouldNotAllowSettingInvalidCheckedException()59     public void shouldNotAllowSettingInvalidCheckedException() throws Exception {
60         when(mock.simpleMethod()).thenThrow(new Exception());
61     }
62 
63     @Test(expected=MockitoException.class)
shouldNotAllowSettingNullThrowable()64     public void shouldNotAllowSettingNullThrowable() throws Exception {
65         when(mock.simpleMethod()).thenThrow(new Throwable[] {null});
66     }
67 
68     @SuppressWarnings("all")
69     @Test(expected=MockitoException.class)
shouldNotAllowSettingNullThrowableVararg()70     public void shouldNotAllowSettingNullThrowableVararg() throws Exception {
71         when(mock.simpleMethod()).thenThrow((Throwable) null);
72     }
73 
74     @Test(expected=MockitoException.class)
shouldNotAllowSettingNullConsecutiveThrowable()75     public void shouldNotAllowSettingNullConsecutiveThrowable() throws Exception {
76         when(mock.simpleMethod()).thenThrow(new RuntimeException(), null);
77     }
78 
79     final class FinalClass {}
80 
81     @Test(expected=MockitoException.class)
shouldNotAllowMockingFinalClassesIfDisabled()82     public void shouldNotAllowMockingFinalClassesIfDisabled() throws Exception {
83         assumeFalse("Inlining mock allows mocking final classes", mock(FinalClass.class).getClass() == FinalClass.class);
84     }
85 
86     @SuppressWarnings({"CheckReturnValue", "MockitoUsage"})
87     @Test(expected=MockitoException.class)
shouldNotAllowMockingPrimitives()88     public void shouldNotAllowMockingPrimitives() throws Exception {
89         mock(Integer.TYPE);
90     }
91 
92     interface ObjectLikeInterface {
equals(Object o)93         boolean equals(Object o);
toString()94         String toString();
hashCode()95         int hashCode();
96     }
97 
98     @Test
shouldNotMockObjectMethodsOnInterface()99     public void shouldNotMockObjectMethodsOnInterface() throws Exception {
100         ObjectLikeInterface inter = mock(ObjectLikeInterface.class);
101 
102         inter.equals(null);
103         inter.toString();
104         inter.hashCode();
105 
106         verifyZeroInteractions(inter);
107     }
108 
109     @Test
shouldNotMockObjectMethodsOnClass()110     public void shouldNotMockObjectMethodsOnClass() throws Exception {
111         Object clazz = mock(ObjectLikeInterface.class);
112 
113         clazz.equals(null);
114         clazz.toString();
115         clazz.hashCode();
116 
117         verifyZeroInteractions(clazz);
118     }
119 }
120