• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.mockitousage.bugs;
2 
3 import static org.assertj.core.api.Assertions.assertThat;
4 import static org.mockito.Mockito.mock;
5 import static org.mockito.Mockito.when;
6 
7 import org.junit.Test;
8 
9 public class ConfusedSignatureTest {
10 
11     @Test
should_mock_method_which_has_generic_return_type_in_superclass_and_concrete_one_in_interface()12     public void should_mock_method_which_has_generic_return_type_in_superclass_and_concrete_one_in_interface() {
13         Sub mock = mock(Sub.class);
14         // The following line resulted in
15         // org.mockito.exceptions.misusing.MissingMethodInvocationException:
16         // when() requires an argument which has to be 'a method call on a mock'.
17         // Presumably confused by the interface/superclass signatures.
18         when(mock.getFoo()).thenReturn("Hello");
19 
20         assertThat(mock.getFoo()).isEqualTo("Hello");
21     }
22 
23     public class Super<T> {
24         private T value;
25 
Super(T value)26         public Super(T value) {
27             this.value = value;
28         }
29 
getFoo()30         public T getFoo() { return value; }
31     }
32 
33     public class Sub
34             extends Super<String>
35             implements iInterface {
36 
Sub(String s)37         public Sub(String s) {
38             super(s);
39         }
40     }
41 
42     public interface iInterface {
getFoo()43         String getFoo();
44     }
45 }
46