我有一个方法,我想进行单元测试,内部调用Butterknife(Object.class, Activity.class)
。它看起来像这样:
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();
}
测试在Butterknife
类中抛出NPE是有意义的。我尝试使用Mockito.when()
来模拟和“隐藏”对Butterknife.bind()
的直接调用,然后重新模仿Unbinder
,但没有任何成功。这有什么解决方案吗?
答案 0 :(得分: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");
希望这就是你要找的东西。
答案 1 :(得分:0)
答案 2 :(得分:0)
这可能无法解答您的问题,但单元测试应该测试您编写的逻辑,而不是您的平台和库中内置的逻辑。你的第一个断言是测试java赋值运算符。你的第二个断言是测试ButterKnife.bind方法,最后一个是测试java方法调用机制!