2017-01-17 38 views
1

我有一個方法,我想單元測試,那裏面叫Butterknife(Object.class, Activity.class)。它看起來像這樣:單元測試 - Mockito和Butterknife - 如何模擬

public void bindActivity(Activity activity) { 
    this.activity = activity; 
    unbinder = ButterKnife.bind(this, activity); 
    init(); 
} 

測試方法:

@Test 
public void testBindActivity() throws Exception { 
    Activity activity = mock(Activity.class); 

    tested.bindActivity(activity); 

    assertNotNull(tested.activity); 
    assertNotNull(tested.unbinder); 
    verify(tested).init(); 
} 

測試,拋出NPE在Butterknife類是有意義的。我嘗試過使用Mockito.when()來模擬和「隱藏」,直接撥打電話Butterknife.bind(),然後重新嘲笑Unbinder但沒有任何成功。有沒有解決這個問題的方法?

回答

0

是的,你的測試類中,你需要像一個實例變量:

import org.mockito.Mock; 
import org.mockito.runners.MockitoJUnitRunner; 
import static org.mockito.Mockito.when; 

@RunWith(MockitoJUnitRunner.class) 
public class SomeTest { 

    @Mock 
    Activity mockActivity; 

    ... 

} 

然後,你需要把它注入到你的測試類的類:

tested.bindActivity(mockActivity); 

你也可能想添加一些.when()的東西,如:

when(mockActivity.callsSomeMethod()).thenReturn("something"); 

希望這就是你要找的。

0

你不能用Mockito來嘲弄像Butterknife.bind()這樣的靜態方法調用。

你可以使用Powermock來做到這一點,但對於這種測試,你應該做儀器測試。

看一看here