我正在尝试使用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()在屏幕上显示修改后的数据值进行单元测试?
答案 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中引入了此功能,因此必须对其进行升级。