使用Robolectric测试Android库

9
我创建了一个库,可以在Android环境中使用。目前它包含了"Plain Old Groovy Objects",没有任何Android依赖项。这些POGO的测试运行正常。
为了扩展库的功能,我创建了一些继承自Android类或依赖于它们的类,我也想测试它们。当然,测试应该是库的一部分,而不应该作为包括库的Android应用程序项目的一部分实现。
我知道可以通过Robolectric来帮助测试应用程序,它的效果非常好,但我看不到在没有整个Android应用程序的情况下使用它的可能性。
有没有一种方法可以使用Android依赖项和Robolectric测试库?
我正在使用Android Studio 1.2。

1
你使用的Robolectric版本是什么?我为库项目编写了几个测试,但没有应用程序本身。但它是Android库而不是纯Java(Groovy)。你可以只使用Android Gradle插件本身,它可以使用默认返回值模拟android.jar。我不确定它是否适合你。 - Eugen Martynov
@EugenMartynov 对于最新的应用程序,我使用了Robolectric 3.0 RC2,但是使其与版本2.x一起工作,并将其作为Android Java库也可以。 我只需要一些基本设置来开始。 - EightBitBoy
3
您可以在https://github.com/nenick/AndroidStudioAndRobolectric/tree/library找到使用Robolectric测试库模块的基本示例。您的项目设置有问题吗? - nenick
1个回答

1

我认为Robolectric对你来说是一个不错的选择。例如,如果你编写了一个继承自DialogFragment的类,你可以查看它是否行为正确:

@RunWith(RobolectricTestRunner.class)
public class ProgressDialogFragmentTest {
private static final String MESSAGE_KEY = "KEY_PROGRESS_MESSAGE";
private static final String TEST_MESSAGE = "test message";

@Test
public void argumentsContainExpectedKey() {
    //given
    ProgressDialogFragment fragment = ProgressDialogFragment.newInstance(TEST_MESSAGE);

    //when
    boolean containsExpectedKey = fragment.getArguments().containsKey(MESSAGE_KEY);

    //then
    assertTrue(containsExpectedKey);
}

@Test
public void argumentsContainsValidMessage() {
    //given
    ProgressDialogFragment fragment = ProgressDialogFragment.newInstance(TEST_MESSAGE);

    //when
    String actualMessage = fragment.getArguments().getString(MESSAGE_KEY);

    //then
    assertEquals(TEST_MESSAGE, actualMessage);
}

@Test
public void createdDialogIsProgressDialog() {
    //given
    ProgressDialogFragment fragment = ProgressDialogFragment.newInstance(TEST_MESSAGE);
    FragmentTestUtil.startFragment(fragment);

    //when
    Dialog dialog = fragment.getDialog();

    //then
    assertTrue(dialog instanceof ProgressDialog);
}

@Test
public void dialogIsHiddenBeforeRunShowMethod() {
    //given
    ProgressDialogFragment fragment = ProgressDialogFragment.newInstance(TEST_MESSAGE);
    FragmentTestUtil.startFragment(fragment);

    //when
    ProgressDialog dialog = (ProgressDialog) fragment.onCreateDialog(fragment.getArguments());
    boolean showing = dialog.isShowing();

    //then
    assertFalse(showing);
}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接