2017-01-17 39 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