当我使用Robolectric创建活动时,我收到此错误:
java.lang.IllegalArgumentException: INTERNET permission is required.
这就是我正在做的事情:
@Config(constants = BuildConfig.class,
sdk = TestConfig.MIN_SDK_UNIT_TESTS,
manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricGradleTestRunner.class)
public class ATest {
@Test public void testTrackDoNotAskMeAgainSelected() throws Exception {
final AnActivity activity = Robolectric.buildActivity(AnActivity.class).create().get();
}
更新1:我们目前的设置,我们有这样的表现:
app/src/androidTest/AndroidManifest.xml
app/src/debug/AndroidManifest.xml
app/src/main/AndroidManifest.xml
app/src/test/AndroidManifest.xml
我发现debug
被执行而不是test
,所以这就是为什么app/src/test/AndroidManifest.xml
的许可被忽略了。
将此添加到您的清单:
<uses-permission android:name="android.permission.INTERNET" />
对于这种情况,请检查在debugTest flavor(文件夹)中使用AndroidManifest。
初始化SDK [在我的案例中]段,需要INTERNET权限作为单独的函数,如下所示 -
@VisibleForTesting()
public void initializeSegmentSdk() {
// Create an analytics client with the given context and Segment write key.
Analytics analytics = new Analytics.Builder(this, "xyz")
// Enable this to record certain application events automatically!
.trackApplicationLifecycleEvents()
// Enable this to record screen views automatically!
.recordScreenViews()
.build();
// Set the initialized instance as a globally accessible instance.
Analytics.setSingletonInstance(analytics);
}
创建一个包含上述方法的类的阴影,并重写此方法以返回空。
要么
每当调用initializeSegmentSdk()
方法时,您也可以使用Mockito返回任何内容