如何测试Evernote的Android职位?

时间:2017-07-15 23:26:09

标签: android testing android-job

如何测试使用Android-Job库创建的作业?有关单元测试,仪器测试甚至手动测试的任何想法都很受欢迎,我只想检查它是否按预期工作。

具体来说,我有一个每N小时执行一次HTTP请求的工作:

package com.kondenko.yamblzweather.job;


import android.support.annotation.NonNull;

import com.evernote.android.job.Job;
import com.evernote.android.job.JobRequest;
import com.kondenko.yamblzweather.model.entity.WeatherData;
import com.kondenko.yamblzweather.ui.weather.WeatherInteractor;
import com.kondenko.yamblzweather.utils.SettingsManager;

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;

public class UpdateWeatherJob extends Job {

private WeatherInteractor interactor;
private String cityId;
private String units;
private long refreshRateHr;

// Do not delete, needed for job creation
public static final String TAG = "UpdateWeaterJob";

@Inject
public UpdateWeatherJob(WeatherInteractor interactor, SettingsManager settingsManager) {
    this.interactor = interactor;
    this.cityId = settingsManager.getSelectedCity();
    this.units = settingsManager.getSelectedUnitValue();
    this.refreshRateHr = settingsManager.getRefreshRate();
}

@NonNull
@Override
protected Result onRunJob(Params params) {
    WeatherData data = interactor.getWeather(cityId, units).blockingGet();
    return data != null ? Result.SUCCESS : Result.FAILURE;
}


public void buildJobRequest(String name) {
    new JobRequest.Builder(UpdateWeatherJob.TAG)
            .setPeriodic(TimeUnit.HOURS.toMillis(refreshRateHr))
            .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
            .setRequirementsEnforced(true)
            .setPersisted(true)
            .build()
            .schedule();
}

}

1 个答案:

答案 0 :(得分:5)

我们在Evernote测试工作中采用以下方式:

  • 单元测试 - >我们倾向于将逻辑提取为动作,类似于MVP设置中的演示者。这将删除Android依赖项,并且操作可以单元测试。
  • QA - >我们有QA选项来手动触发作业。这样我们的QA团队就可以验证作业是否产生正确的输出
  • 验证时间 - >我们依靠日志。

您还应该看看these slides。亚行可以真正帮助验证幕后假设。