刚开始为我的应用创建UT并使用PowerMock,Mockito和Junit4。 我有一个非常基本的问题,模仿Context和getApplicationContext()。我似乎无法理解如何做到这一点。
到目前为止,我尝试了以下内容:
@Before
public void setUp() throws Exception {
mContext = Mockito.mock(Context.class);
Mockito.when(mContext.getApplicationContext()).thenReturn(mContext);
PowerMockito.whenNew(IabHelper.class).withAnyArguments().thenReturn(new IabHelperMock(mContext, null));
}
当我使用调试器(Android Studio)并暂停下面的行时,一切运行正常,但是当我在没有调试器的情况下运行测试时,测试失败(因为同一行):
public IabHelper(Context ctx, String base64PublicKey) {
mContext = ctx.getApplicationContext();
...
}
我得到的失败信息是:
org.mockito.exceptions.misusing.UnfinishedStubbingException: 这里检测到未完成的存根: - >在org.powermock.api.mockito.internal.invocation.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)
例如。那么返回()可能会丢失 正确存根的例子:
当(mock.isOk())thenReturn(真)。
当(mock.isOk())thenThrow(例外);
doThrow(例外)。当(模拟).someVoidMethod();
提示:
1.缺少返回() 2.你正在试图找到一个最终的方法,你顽皮的开发人员!
3:你正在查看另一个模拟内部的行为然后返回'然后返回'指示完成后 在com.xxx.libs.components.purchase.util.IabHelper。(IabHelper.java:164)
在com.xxx.libs.mocks.IabHelperMock。(IabHelperMock.java:22)
...
我显然做错了什么,我想知道到底是什么。使用Context和getApplicationContext()的最佳做法是什么? 感谢。