尝试使用PowerMockito抛出RuntimeException“ stub!”,尝试使用枪支Android活动类。
-
03-10-2019 - |
题
我找到了这个 例子 他们使用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。
我意识到这个问题是旧的,但是我认为这是正确的答案,因此我想确保将其记录在问题上。