2017-05-12 81 views
1

我是新來的Android單元測試,我正在使用Mockito來做到這一點。單元測試從另一個類調用的方法

我想測試我的方法有另一個類的方法。我想存根該方法,以便它不應該被調用。我正在使用doReturn().when(),以便不調用原始方法,但它正在調用原始方法。

這裏是我的代碼:

doReturn(true).when(myclass1mock).methodofclass1(); 
boolean a = myclass1mock.methodofclass1(); //here it return true 
class2spy.methodofclass2(anyvalue); 

我測試的方法是:

public class2 { 
    public void methodofclass2(Value) { 
     boolean value = class1.methodofclass1(); //here I don't want to call this method 
    } 
} 

的問題是class1方法每次調用。我想要一些東西,以便class1.methodofclass1()不被調用。

我使用注射:

@Mock 
class1 myclass1mock; 
@InjectMocks 
class2 myclass2; 
@Before 
public void setUp() { 
    myclass2 = new myclass2(); 
    class2spy = Mockito.spy(myclass2); 
} 
+0

你如何將class1mock注入class2spy? –

+0

看到我編輯的答案 – exceptionnotgood

+0

@MaciejKowalski我已編輯它 – exceptionnotgood

回答

1

當你要測試的Class2的行爲,那麼我想你混淆了註釋。此外,我會趁@Spy註解,而通過手工配置它:

@Spy 
class1 myclass1Spy; 

@InjectMocks 
class2 myclass2; 

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

另外,不要儘量不要窺探這是測試(等級2)是類。使用真正的實現。

+0

其實我對@spy和原始對象實現有點困惑,因爲兩者執行相同的操作,但間諜只是副本 – exceptionnotgood

+0

如果您不執行任何配置,它與真正的impl基本相同。間諜讓你嘲笑一些方法返回特定的值。在你的情況下,只適用於class1。測試用例關注的Class2,不需要被窺探。 –

+0

感謝您的詳細解釋 – exceptionnotgood

相關問題