Java 带有AndroidAnnotations的Robolectric使测试挂起/不运行

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设置在注释时产生的结果。但是为什么我不能使用此注释设置我的活动

我正在尝试用Robolectric库配置一个基本应用程序。我使用的是lattest版本(3.0)、lattest AndroidAnnotations版本(3.3.2)和Gradle 1.4.0

在经历了诸如AndroidHttpClient异常之类的一些问题之后,我设法通过一个非常简单的测试完成了它

现在我想用一个活动进行进一步的测试,但我无法运行测试。测试以某种方式挂起,从不屈服(每次测试都是黄色旋转)

这似乎是因为@Before设置在注释时产生的结果。但是为什么我不能使用此注释设置我的活动?特别是当我使用带注释的活动(而不是生成的活动)时,它会产生结果,这在使用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);
  }

}
如果有什么帮助的话,我也在使用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你做了很多挖掘工作。我将来必须对新的许可制度更加小心;)