2016-09-29 57 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,全部清楚谢谢你们俩! –