Ложный менеджер аккаунтов с AndroidJUnit4

У меня есть активность, которая вызывает AccountManager.get(this) давая мне экземпляр AccountManager для вызова getAuthTokenByFeatures(),

Я хочу проверить это действие и высмеивать различные ответы, которые менеджер по работе с клиентами может дать мне.

Используя тесты AndroidJUnit4, как я могу разорвать эту зависимость и внедрить фиктивный менеджер учетных записей в свою деятельность?

Я нашел этот ответ, в котором рассказывается, как создать ContextWrapper для изменения getSystemService() реализация. Однако в ответе используется ActivityUnitTestCase, который устарел. Есть ли способ сделать это с помощью тестов AndroidJUnit4?

Тестируемая активность:

public class SplashActivity extends AbstractActivity implements SplashView {

    private static final String TAG = SplashActivity.class.getSimpleName();
    private AccountManager accountManager;

    @Override
    protected void onCreate(@Nullable final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash);

        accountManager = AccountManager.get(this);
        accountManager.getAuthTokenByFeatures(
                ACCOUNT_TYPE,
                AccountConstants.AUTH_TOKEN_TYPE_MAIN,
                null,
                this,
                null,
                null,
                new AccountManagerCallback<Bundle>() {
                    @Override
                    public void run(AccountManagerFuture<Bundle> future) {
                        try {
                            Bundle bundle = future.getResult();
                            Log.d(TAG, "Created Authentication token: "
                                    + bundle.getString(AccountManager.KEY_AUTHTOKEN));
                            launchHomeScreen();
                        } catch (OperationCanceledException e) {
                            showAuthorizationError();
                        } catch (IOException | AuthenticatorException e) {
                            showAuthorizationError();
                        }
                    }
                },
                null);
    }

    @Override
    public void launchHomeScreen() {
        HomeActivity.start(this);
    }

    @Override
    public void showAuthorizationError() {
        new AlertDialog.Builder(this)
                .setMessage(R.string.vt_alert_authorization_failed)
                .setNeutralButton(R.string.vt_ok, null)
                .create()
                .show();
    }
}

0 ответов

Другие вопросы по тегам