2017-07-15 28 views
2

如何測試使用Android-Job庫創建的作業?任何有關單元測試,儀器測試甚至手動測試的想法都會受到讚賞,我只是想檢查它是否按預期工作。如何測試Evernote的Android作業?

具體而言,我有一個執行HTTP請求,每N小時作業:

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(); 
} 

} 
+0

您是否找到更多信息? –

+0

@ DuckN'Bear nope,我最終不得不把日誌放在工作中,並閱讀它們以確保它能正常工作。 –

回答

1

我們在Evernote的測試工作方式如下:

  • 單元測試 - >我們傾向於將邏輯提取到動作中,類似於MVP設置中的演示者。這消除了Android依賴關係,這些操作都是單元測試。
  • 質量保證 - >我們有QA選項來手動觸發作業。通過這種方式,我們的QA團隊可以驗證作業是否產生正確的輸出
  • 驗證時機 - >我們依賴於日誌。

你也應該看看these slides。亞行可以真正幫助驗證帷幕假設。