使用Robolectric测试Android库

Eig*_*Boy 8 java testing groovy android robolectric

我创建了一个可以在Android环境中使用的库.目前它包含Plain Old Groovy Objects,没有Android依赖项.对那些POGO的测试运行没有问题.

为了扩展库的功能,我创建了继承Android类或依赖它们的类,我也想测试它们.当然,测试应该是库的一部分,不应该作为包含库的Android应用程序项目的一部分来实现.

我知道一个应用程序可以在Robolectric的帮助下进行测试,它运行得很好,但我认为没有可能在没有整个Android应用程序的情况下使用它.

有没有办法测试具有Android依赖项和Robolectric的库?

我使用的是Android Studio 1.2.

小智 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);
}

}
Run Code Online (Sandbox Code Playgroud)