Java 带有AndroidAnnotations的Robolectric使测试挂起/不运行
我正在尝试用Robolectric库配置一个基本应用程序。我使用的是lattest版本(3.0)、lattest AndroidAnnotations版本(3.3.2)和Gradle 1.4.0 在经历了诸如AndroidHttpClient异常之类的一些问题之后,我设法通过一个非常简单的测试完成了它 现在我想用一个活动进行进一步的测试,但我无法运行测试。测试以某种方式挂起,从不屈服(每次测试都是黄色旋转) 这似乎是因为@Before设置在注释时产生的结果。但是为什么我不能使用此注释设置我的活动?特别是当我使用带注释的活动(而不是生成的活动)时,它会产生结果,这在使用AndroidAnnotations时不是正确的测试方法 这是我截短的测试类,仍然无法执行…:Java 带有AndroidAnnotations的Robolectric使测试挂起/不运行,java,android,robolectric,android-annotations,Java,Android,Robolectric,Android Annotations,我正在尝试用Robolectric库配置一个基本应用程序。我使用的是lattest版本(3.0)、lattest AndroidAnnotations版本(3.3.2)和Gradle 1.4.0 在经历了诸如AndroidHttpClient异常之类的一些问题之后,我设法通过一个非常简单的测试完成了它 现在我想用一个活动进行进一步的测试,但我无法运行测试。测试以某种方式挂起,从不屈服(每次测试都是黄色旋转) 这似乎是因为@Before设置在注释时产生的结果。但是为什么我不能使用此注释设置我的活动
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
public class MapActivityTest {
private MapActivity_ mMapActivity;
@Before
public void setup() {
mMapActivity = Robolectric.buildActivity(MapActivity_.class).create().get();
}
@Test
public void checkActivityNotNull() throws Exception {
assertNotNull(mMapActivity);
}
}
如果有什么帮助的话,我也在使用Java1.8
有人知道是什么导致了这个问题吗
已经谢谢你了
更新:
降级到Java 7后尝试,结果相同。AndroidAnnotations对robolectric没有问题 在一些线程转储之后,我找到了循环代码。类
KBLocationProvider
包含以下代码段
boolean isPermissionGranted = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (!isPermissionGranted) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_LOCATION);
}
而且checkSelfPermission(…)
方法永远不会返回true。此方法调用上下文上的checkPermission(..)
方法。checkPermission(…)
的缩写显示了ShadowApplicationTest,其中显示了checkPermission的用法
添加以下行后,您的测试即告结束
@Before
public void setup() {
Shadows.shadowOf(RuntimeEnvironment.application).grantPermissions(Manifest.permission.ACCESS_FINE_LOCATION);
mMapActivity = Robolectric.buildActivity(MapActivity_.class).create().get();
}
当权限被拒绝时,您似乎遇到了无休止循环的问题。对于robolectric,AndroidAnnotations不是问题 在一些线程转储之后,我找到了循环代码。类
KBLocationProvider
包含以下代码段
boolean isPermissionGranted = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (!isPermissionGranted) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_LOCATION);
}
而且checkSelfPermission(…)
方法永远不会返回true。此方法调用上下文上的checkPermission(..)
方法。checkPermission(…)
的缩写显示了ShadowApplicationTest,其中显示了checkPermission的用法
添加以下行后,您的测试即告结束
@Before
public void setup() {
Shadows.shadowOf(RuntimeEnvironment.application).grantPermissions(Manifest.permission.ACCESS_FINE_LOCATION);
mMapActivity = Robolectric.buildActivity(MapActivity_.class).create().get();
}
当权限被拒绝时,您似乎遇到了无休止循环的问题。您的internet连接是否良好?Robolectric首先下载大型依赖项。还可以尝试从命令行运行。我也会尝试降级到Java 7,我不确定Robolectric是否能够支持Java 8。是的,可靠的internet连接和下载花费了一些时间:)在命令行中也尝试过,同样的结果,它不会产生。我会试试Java7,我猜这可能是个问题。。。使用Java8时不容易降级。无法摆脱它!好的,最后为Android Studio设置Java7。但不幸的是,同样的结果……这是一个大项目吗?你能分享一下吗?如果没有,尝试调试并在挂起时暂停,并检查当前堆栈跟踪是否有良好的internet连接?Robolectric首先下载大型依赖项。还可以尝试从命令行运行。我也会尝试降级到Java 7,我不确定Robolectric是否能够支持Java 8。是的,可靠的internet连接和下载花费了一些时间:)在命令行中也尝试过,同样的结果,它不会产生。我会试试Java7,我猜这可能是个问题。。。使用Java8时不容易降级。无法摆脱它!好的,最后为Android Studio设置Java7。但不幸的是,同样的结果……这是一个大项目吗?你能分享一下吗?如果没有,试着调试并在挂起时暂停它,并经常查看当前堆栈traceThanks@nenick您做了一些挖掘。我将来必须对新的许可制度更加小心;)非常感谢@nenick你做了很多挖掘工作。我将来必须对新的许可制度更加小心;)