Mockito - 模拟Context和getApplicationContext()

时间:2015-07-30 12:57:58

标签: java android unit-testing mockito powermock

刚开始为我的应用创建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()的最佳做法是什么? 感谢。

0 个答案:

没有答案