Ложный менеджер аккаунтов с 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();
}
}