我正在尝试使用Robolectric库配置基本应用程序。我使用的是lattest版本(3.0)以及最新的AndroidAnnotations版本(3.3.2)和Gradle 1.4.0。
在遇到AndroidHttpClient异常等少数问题后,我设法完成了一项非常简单的测试。
现在我想用Activity进一步测试,但我无法运行测试。测试以某种方式挂起并且永不屈服(每次测试都是黄色旋转)。
似乎是因为@Before设置,因为它在评论时产生。但为什么我不能使用这个注释设置我的活动?特别是在我使用带注释的Activity(而不是生成的Activity_)时产生的效果,这不是使用AndroidAnnotations时测试的正确方法。
这是我的截断测试类仍然无法执行...:
@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);
}
}
如果可能有任何帮助,我也在使用Java 1.8。
有谁知道可能导致此问题的原因是什么?
谢谢!
更新
在降级到Java 7并尝试相同结果后尝试。
答案 0 :(得分:5)
对于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(..)
的短search显示了一个ShadowApplicationTest,它显示了checkPermission的用法。
添加以下行后,您的测试即将完成。
@Before
public void setup() {
Shadows.shadowOf(RuntimeEnvironment.application).grantPermissions(Manifest.permission.ACCESS_FINE_LOCATION);
mMapActivity = Robolectric.buildActivity(MapActivity_.class).create().get();
}
当权限被拒绝时,您似乎遇到无限循环问题。