使用Robolectric 4.1的ShadowOf()API时出现运行时错误

时间:2019-02-18 15:30:01

标签: robolectric

我正在尝试使用Robolectric的ShadowOf()API来验证在开发代码中调用适配器的notifyDatasetChanged时是否以更改的数据值显示列表视图中的项目。

为此,我正在尝试获取ShadowListView并进行验证:

ListView lv = myFragment.getView().findViewById(R.id.myActualListView);
ShadowListView shadowListView = Shadows.shadowOf(lv);  // <-- fails at runtime
shadowListView.populateItems();

assertTrue(shadowOf(adapter).wasNotifyDataSetChangedCalled());      
assertTrue(lv.getChildCount() > 0);  

//more lines of code to access list item

但是,在运行测试类时,我却不断遇到与无关类有关的错误。

之前,出现以下错误:

  

错误:无法访问EuiccManager类文件   找不到android.telephony.euicc.EuiccManager

在build.gradle文件中包括以下行之后:

testImplementation 'org.robolectric:robolectric:3.6.1' 

SliceManager出现错误,我在代码中的任何地方都没有使用过-

  

错误:无法访问SliceManager类文件   找不到android.app.slice.SliceManager

下面的我的gradle文件:

    //Robolectric
  testImplementation 'org.robolectric:robolectric:4.1'
   // testImplementation ('org.robolectric:shadows-supportv4:4.1')

   testImplementation 'org.robolectric:robolectric:3.6.1'


    testImplementation 'androidx.test:core:1.1.0'
    testImplementation 'org.mockito:mockito-core:2.8.9'
    androidTestImplementation 'org.mockito:mockito-android:2.8.9'
    testImplementation 'com.google.truth:truth:0.42'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
    androidTestImplementation 'junit:junit:4.12'
    testImplementation 'com.google.code.findbugs:jsr305:1.3.9'
    testImplementation 'org.powermock:powermock-api-mockito2:1.7.1'
    testImplementation 'org.powermock:powermock-module-junit4:1.7.1'

由于缺少类的此错误,我无法使用Shadows.shadowOf()API。 我有什么办法可以对列表视图是否针对开发代码中调用的notifydatasetchange()在屏幕上显示修改后的数据值进行单元测试?

2 个答案:

答案 0 :(得分:1)

添加4.2版本的Robolectric。 所有问题均在4.2版本中解决。

    *testImplementation 'org.robolectric:robolectric:4.2'*

注意:Android SDK版本28

答案 1 :(得分:0)

将compileSdkVersion升级到API 28。

发生这种情况是因为新版本的robolectric在shadowOf函数中使用了android.net.wifi.rtt.WifiRttManager,并且API 28中引入了此功能,因此必须对其进行升级。