我找到了这个 例子 他们使用PowerMock和EasyMock为Android的菜单和Menuitem类固定。我一直在尝试使用PowerMock和Mockito在活动类中做类似的事情。

我知道许多方法都是最终的,并且在Android.jar中,它们都只是投掷Runtime Exception(“ stub!”)。

我也知道该测试不完整,但我只是想看看是否可以模拟Android活动类。

但是,鉴于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");
    }
}

我认为Runtime Exception将不再发生,并且将返回“标题”,但仍然会引发异常。

我尝试了各种不同的事情 doReturn("Title").when(mockActivity).getTitle();suppress(constructor(Activity.class));

我是做错了什么还是不可能?

有帮助吗?

解决方案

我只是尝试了您的代码示例,它在这里起作用,很奇怪。我下载了使用Mockito和Junit的PowerMock 1.4.5,包括依赖项,并使用了SDK(2.2)的Android.jar。如果我删除@preparefortest,则只有例外情况才会失败。

编辑

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

其他提示

可能不是对您的问题的直接答案,但是您可以尝试 robolectric 为了在PC上测试Android应用的某些部分。

Roboelectric避免了存根!例外,给你一些 最小 Android类实施

我认为答案是您所引用的库的顺序很重要,因为Android.jar包括一些Junit的存根。

您必须确保在测试项目中,如果您转到“属性”,然后将“ Java构建路径”与您下载的完整版本的PowerMock相关联的Junit Jar在“订单和导出” TAB上显示 多于 android.jar。如果没有,系统将从android.jar中解析junit.framework和junit.runner。

我意识到这个问题是旧的,但是我认为这是正确的答案,因此我想确保将其记录在问题上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top