使用AndroidAnnotations的Robolectric使测试挂起/不运行

pti*_*nou 1 java android robolectric android-annotations

我正在尝试使用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);
  }

}
Run Code Online (Sandbox Code Playgroud)

如果可能有任何帮助,我也在使用Java 1.8.

有谁知道什么可能导致这个问题?

谢谢!

更新:

在降级到Java 7并尝试相同结果后尝试.

nen*_*ick 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);
}
Run Code Online (Sandbox Code Playgroud)

并且该checkSelfPermission(...)方法永远不会返回true.此方法调用checkPermission(..)上下文中的方法.短搜索checkPermission(..)呈ShadowApplicationTest其中显示的checkPermission使用.

https://github.com/robolectric/robolectric/blob/867a805f36d7492ba80f150836bf88b97c3248e0/robolectric/src/test/java/org/robolectric/shadows/ShadowApplicationTest.java#L532

添加以下行后,您的测试即将完成.

@Before
public void setup() {
    Shadows.shadowOf(RuntimeEnvironment.application).grantPermissions(Manifest.permission.ACCESS_FINE_LOCATION);
    mMapActivity = Robolectric.buildActivity(MapActivity_.class).create().get();
}
Run Code Online (Sandbox Code Playgroud)

当权限被拒绝时,您似乎遇到无限循环问题.