使用PowerMockito尝试存根android活动类会抛出RuntimeException"Stub!"

byt*_*der 9 junit android unit-testing mockito powermock

我找到了这个例子,他们使用PowerMock和EasyMock来存储/模拟Android的Menu和MenuItem类.我一直在尝试使用Activity类与PowerMock和Mockito做类似的事情.

我知道很多方法都是最终的,在Android.jar中它们都只是抛出RuntimeException("Stub!").

我也明白这个测试并不完整,但我只是想看看是否可以模拟android的Activity类.

但是考虑到PowerMock允许你用最终方法模拟类,这个代码不应该工作吗?

@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {

    public void testPlease_JustWork() throws Exception {
        Activity mockActivity = PowerMockito.mock(Activity.class);

        PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为RuntimeException将不再发生,并且将返回"Title",但它仍然会抛出异常.

我尝试了各种不同的东西,比如doReturn("Title").when(mockActivity).getTitle();suppress(constructor(Activity.class));

我做错了什么或这是不可能的?

sup*_*jos 5

可能不是您问题的直接答案,但您可以尝试使用Robolectric来测试您PC上的部分Android应用程序.

Roboelectric避开了Stub!异常并为您提供一些最小的 Android类实现


Mai*_*aik 0

我刚刚尝试了你的代码示例,它在这里工作,很奇怪。我下载了包含依赖项的 PowerMock 1.4.5 以及 Mockito 和 JUnit,并使用了 sdk (2.2) 中的 android.jar。如果我删除@PrepareForTest,它只会失败。

编辑

您可以使用 android.jar 以及您引用的文章中提供的已删除的异常代码。