上一篇中,基于调研和分析,决定使用Powermock
完成单元测试的编写。
关于Powermock
的使用方式,网上有很多的文章进行解释,下面仅仅介绍一些在Android
上的常用姿势。
随着时间推移,该文章会不断完善。
Mock vs Spy
Powermock提供了mock
和spy
两种方式,对于Activity
的私有方法的调用验证通常需要做方法模拟。mock
和spy
都可以实现,mock
是默认对有方法都模拟。spy
是默认对所有方法都不模拟。
个人建议是使用mock
,因为activity
里面的方法逻辑很多,而对于一个单元测试,我们往往只是测试一个方法,对其它方法都需要mock
。用以验证调用或者模拟方法返回值等。
findViewById
activity
中最不缺的就是控件查找,那么直接调用findViewById()
肯定是会报错的Stub
。那么通常的做法是mock
一个activity
,但是mock
的方法的findViewById()
返回值为null。
举例:验证activity
的onCreate
中是否对View
设置了点击监听。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
mSkipView = findViewById(R.id.skip);
mSkipView.setOnClickListener(this);
}
测试代码:
@PrepareForTest({
LauncherActivity.class, Build.VERSION.class})
public class LauncherActivityTest extends PowerMockTest {
@Mock
LauncherActivity activity;
@Mock
View mSkipView;
@Test
public void onCreateSdk19() throws Exception {
PowerMockito.doCallRealMethod().when(activity, "onCreate", ArgumentMatchers.any(