Robolectric 使用 AndroidAnnotations 进行测试 hang/not 运行
Robolectric with AndroidAnnotations make tests hang/not running
我正在尝试使用 Robolectric 库配置基本应用程序。我正在使用最新版本 (3.0) 以及最新的 AndroidAnnotations 版本 (3.3.2) 和 Gradle 1.4.0.
在解决了 AndroidHttpClient 异常等几个问题之后,我设法通过一个非常简单的测试完成了它。
现在我想用 Activity 进一步测试,但我无法进行测试 运行。测试以某种方式挂起并且永远不会产生(每个测试的黄色旋转)。
这似乎是由于 @Before 设置而发生的,因为它在评论时会产生。但是为什么我不能使用这个注解来设置我的 activity 呢?特别是当我使用带注释的 Activity(而不是生成的 Activity_)时它会产生,这不是使用 AndroidAnnotations 时测试的正确方法。
这是我的 t运行 测试 class 仍然无法执行...:[=14=]
@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 后尝试,结果相同。
AndroidAnnotations 对于 robolectric 没有问题。
经过一些线程转储后,我找到了循环代码。 class 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(...)
方法永远不会 returns 正确。此方法在上下文中调用 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();
}
当权限被拒绝时,您似乎遇到了无限循环的问题。
我正在尝试使用 Robolectric 库配置基本应用程序。我正在使用最新版本 (3.0) 以及最新的 AndroidAnnotations 版本 (3.3.2) 和 Gradle 1.4.0.
在解决了 AndroidHttpClient 异常等几个问题之后,我设法通过一个非常简单的测试完成了它。
现在我想用 Activity 进一步测试,但我无法进行测试 运行。测试以某种方式挂起并且永远不会产生(每个测试的黄色旋转)。
这似乎是由于 @Before 设置而发生的,因为它在评论时会产生。但是为什么我不能使用这个注解来设置我的 activity 呢?特别是当我使用带注释的 Activity(而不是生成的 Activity_)时它会产生,这不是使用 AndroidAnnotations 时测试的正确方法。
这是我的 t运行 测试 class 仍然无法执行...:[=14=]
@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 后尝试,结果相同。
AndroidAnnotations 对于 robolectric 没有问题。
经过一些线程转储后,我找到了循环代码。 class 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(...)
方法永远不会 returns 正确。此方法在上下文中调用 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();
}
当权限被拒绝时,您似乎遇到了无限循环的问题。