【问题标题】:Testing an Android library with Robolectric使用 Robolectric 测试 Android 库
【发布时间】:2015-05-04 11:16:57
【问题描述】:

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

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

我知道可以在 Robolectric 的帮助下测试应用程序,并且它运行良好,但我认为如果没有整个 Android 应用程序就无法使用它。

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

我使用的是 Android Studio 1.2。

【问题讨论】:

  • 您使用什么版本的 Robolectric?我在没有应用程序本身的情况下为库项目编写了几个测试。但它是 android 库而不是普通的 java (groovy)。您可能只使用 android gradle 插件本身,它可以使用默认返回来模拟 android.jar。我不确定它是否适合你
  • @EugenMartynov 对于最新的应用程序,我使用了 Robolectric 3.0 RC2,但使其适用于 2.x 版并作为 Android Java 库也很好。我只需要一些基本设置即可开始。
  • 在github.com/nenick/AndroidStudioAndRobolectric/tree/library,您可以找到由 robolectric 测试的库模块的基本示例。您的项目设置有问题吗?

标签: java android testing groovy robolectric


【解决方案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);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多