如何使用Mockito编写此方法的测试?



请协助。我似乎不能为这个方法创建一个合适的测试:

protected void startInterfacing() {
    mLiveAuthClient.login(mView.context(), Arrays.asList(SCOPES), new LiveAuthListener() {
        @Override
        public void onAuthComplete(final LiveStatus liveStatus, final LiveConnectSession liveConnectSession,
                                   Object o) {
            // Login successful and user consented, now retrieve user ID and connect with backend server
            getUserIdAndConnectWithBackendServer(liveConnectSession, mLiveAuthClient);
        }
        @Override
        public void onAuthError(LiveAuthException e, Object o) {
            // We failed to authenticate with auth service... show error
            if (e.getError().equals("access_denied") ||
                    e.getMessage().equals("The user cancelled the login operation.")) {
                // When user cancels in either the login or consent page, we need to log the user out to enable
                // the login screen again when trying to connect later on
                logUserOut(mLiveAuthClient, false);
            } else {
                onErrorOccured();
            }
        }
    });
}

我将解释这里发生了什么:我正在验证我的客户并登录OneDrive。该方法首先调用Live SDK的登录方法。那个SDK对象是从这个类外部给我的。所以我基本上可以嘲笑它。以下是我正在努力解决的问题:

  1. 我不需要测试调用登录方法,因为它不是我的。我确实需要测试调用getUserIdAndConnectWithBackendServer()在onAuthComplete。但是这个方法需要一个liveConnectSession对象。我怎么提供呢?它是在onAuthComplete方法上给我的。

  2. 我如何模拟调用onAuthComplete和onAuthError?我读过ArgumentCaptor,但当我使用它时,我需要在调用实际的方法时为那些方法提供参数。例如,argument.getValue(). onauthcomplete()要求我为这个调用添加参数。我在这里提供了什么?

下面是下一个方法,它大致相同,但有自己的问题:
 protected void getUserIdAndConnectWithBackendServer(final LiveConnectSession liveConnectSession, final LiveAuthClient
        authClient) {
    final LiveConnectClient connectClient =  new LiveConnectClient(liveConnectSession);
    connectClient.getAsync("me", new LiveOperationListener() {
        @Override
        public void onComplete(LiveOperation liveOperation) {
            // We got a result. Check for errors...
            JSONObject result = liveOperation.getResult();
            if (result.has(ERROR)) {
                JSONObject error = result.optJSONObject(ERROR);
                String code = error.optString(CODE);
                String message = error.optString(MESSAGE);
                onErrorOccured();
            } else {
                connectWithBackend(result, liveConnectSession, authClient);
            }
        }
        @Override
        public void onError(LiveOperationException e, LiveOperation liveOperation) {
            // We failed to retrieve user information.... show error
            onErrorOccured();
            logUserOut(authClient, false);
        }
    });
}

在这里,我想模拟JSONObject实例。但是我如何调用onComplete方法,或者onError方法。我将提供什么作为方法提供给我的参数。比如LiveOperation ?

谢谢! !

我最终使用的解决方案是使用mockito的doAnswer()结构。这使我能够获得回调参数并调用它的一个方法。另一个解决方案是使用ArgumentCator

相关内容

  • 没有找到相关文章

最新更新