2015-05-04 88 views
8

我创建了一个可以在Android环境中使用的库。目前它包含普通旧Groovy对象,没有Android依赖关系。那些POGO的测试没有问题。使用Robolectric测试Android库

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

我知道一个应用程序可以在Robolectric的帮助下进行测试,它工作的很好,但是我发现没有可能在没有整个Android应用程序的情况下使用它。

有没有一种方法来测试Android的依赖和Robolectric库?

我正在使用Android Studio 1.2。

+1

您使用的是Robolectric的哪个版本?我为图书馆项目编写了几个测试,而没有应用程序本身但它是android库不是普通的java(groovy)。你可能只会用android gradle插件本身,它可以用默认返回模拟android.jar。我不确定它适合你的优点 –

+0

@EugenMartynov对于最新的应用程序,我使用了Robolectric 3.0 RC2,但使它能够与2.x版本一起工作,并且作为Android Java库也很好。我只需要一些基本的设置就可以开始。 – EightBitBoy

+3

在https://github.com/nenick/AndroidStudioAndRobolectric/tree/library,您可以找到由robolectric测试的库模块的基本示例。你的项目设置有问题吗? – nenick

回答

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

}