2016-09-29 62 views
0

擴展I有:模擬方法,通過另一個類

public class A extends B { 
    public ObjectC methodToTest() { 
     return getSomething(); 
    } 
} 

/* this class is in other project and compiles in project I want test */ 
public class B { 
    public ObjectC getSomething() { 
     //some stuff calling external WS 
    } 
} 

和測試:

@RunWith(MockitoJUnitRunner.class) 
public class ATest { 

    @Mock 
    B bMock; 

    @InjectMocks 
    A classTotest; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void getMethodToTestShouldReturnObjectC() { 
     Mockito.when(bMock.getSomething()).thenReturn(new ObjectC()); 
     assertEquals(classTotest.methodToTest().getClass, ObjectC.class); 
    } 
} 

但是當我運行測試的Mockito是調用B(和它失敗,因爲呼叫的WS。 ..)

我讀了很多關於這方面的東西,但我無法解決它。

¿怎樣模擬getSomething()返回ObjectC?

回答

1
Mockito.when(bMock.getSomething()).thenReturn(new ObjectC()); 

此方法僅更改bMock。它不會更改任何其他類別的實例,例如B(或A)實例。

+0

但@InjectMocks並沒有在classToTest上注入bMock? –

+1

@ZaídaDeIsidroNavarro沒有'@ InjectMocks'實際上會將mock注入到相同類型的'A'的字段中,這裏的類'A'沒有字段,所以沒有什麼可以注入 –

+0

好吧,對不起,我錯過了@InjectMocks,全部清楚謝謝你們倆! –