2017-07-03 47 views
1

我使用Evernotes Evernotes的Android作业库android-job计划作业,一切工作正常,但是,当我想是与Robolecteric运行运行测试用例我得到这个错误:Robolectric和

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) 

基本上它用手一指我的应用程序类的63:

JobManager.create(getApplicationContext()).addJobCreator(new JobMaker()); 

回答

4

恰好碰到了这个相同的ISS ue将Evernote库更新到1.1.11之后

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

步骤描述为here

将应用程序类的第63行移至一个方法 - 称为类似setUpJobManager()的方法,然后在onCreate中调用该方法。然后在您的应用程序类的测试版本中覆盖该方法。

public class TestApplication extends AppController implements TestLifecycleApplication { 

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

@Override 
public void createJobManager() { 

} 

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

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 23, application = TestApplication.class)