Robolectric和Evernotes android-job库

Mah*_*uri 2 android robolectric android-jobscheduler

我正在使用Evernotes android-job库进行Scheduling作业,一切正常但是,当我想运行一个运行Robolecteric的测试用例时,我得到了这个错误:

com.evernote.android.job.JobManagerCreateException: All APIs are disabled, cannot schedule any job

at com.evernote.android.job.JobManager.<init>(JobManager.java:184)
at com.evernote.android.job.JobManager.create(JobManager.java:107)
at com.M.MyApp.MyApplication.onCreate(MyApplication.java:63)
at org.robolectric.android.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:137)
at org.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:290)
at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:203)
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:109)
Run Code Online (Sandbox Code Playgroud)

基本上它指向我的应用程序类的第63行:

JobManager.create(getApplicationContext()).addJobCreator(new JobMaker());
Run Code Online (Sandbox Code Playgroud)

Mr *_*zbo 6

刚将Evernote库更新到1.1.11后遇到了同样的问题

您可以将tryManager的初始化包装在try catch中并吞下异常,但更好的解决方案是创建应用程序类的测试版本并将其加载到测试中.

这里描述这些步骤.

将应用程序类的第63行移动到一个方法 - 称为setUpJobManager()之类的方法 - 并在onCreate中调用它.然后在应用程序类的测试版本中覆盖该方法.

public class TestApplication extends AppController implements TestLifecycleApplication {

@Override
public void onCreate() {
    super.onCreate();
}

@Override
public void createJobManager() {

}
Run Code Online (Sandbox Code Playgroud)

然后将TestApplication类传递给你的robolectric测试.只需确保正确注释您的Robolectric测试类以使用测试应用程序类.

@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 23, application = TestApplication.class)
Run Code Online (Sandbox Code Playgroud)