无法验证从静态方法调用的方法



我必须验证是否从静态方法调用了方法。

// Class name: PerformJob
// Method to be tested
public static void job(Context context) {
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
if (jobScheduler != null) {
JobInfo pendingJob = jobScheduler.getPendingJob(Job.POLLING_JOB_ID);
}
}

我测试过的代码:我想验证当jobScheduler实例不为null时,它会调用getPendingJob((。

@PrepareForTest({Context.class, PerformJob.class, JobScheduler.class, JobInfo.class})
@Mock
Context mContext;
@Test
void jobTest(){
mockStatic(PerformJob.class);
JobScheduler scheduler = mock(JobScheduler.class);
JobInfo pendingJob = mock(JobInfo.class)
when(mContext.getSystemService(JOB_SCHEDULING_SERVICE).thenReturn(scheduler);
when(scheduler.getPendingJob(Job.POLLING_JOB_ID)).thenReturn(pendingJob);
PerformJob.job(mContext);

// Job.POLLING_JOB_ID is an Int
verify(scheduler, times(1)).getPendingJob(Job.POLLING_JOB_ID); // It fails.

}

注:PerformJob是一个静态类

错误消息是:";通缉但未调用。。。实际上,这个mock没有任何交互">

这里怎么了?为什么验证失败?请帮忙。我是个新手。我搜索了相同类型的问题,但找不到任何类似的问题解决方案。正在等待帮助。感谢

第一件事是不需要模拟PerformJob类和包含PerformJob类的类。

考虑以下内容:假设您有一个名为Abc的类,在Abc类中有一个称为JobPerformer的静态类,它包含一个名为主job的静态方法,如下所示:

public class Abc {
public static class JobPerformer {
public static void job(Context context) {
JobScheduler jobScheduler = (JobScheduler) 
context.getSystemService(JOB_SCHEDULER_SERVICE);
if (jobScheduler != null) {
JobInfo pendingJob = jobScheduler.getPendingJob(Job.POLLING_JOB_ID);
}
}
}
}

现在在测试类中,您只需要以下内容:

private Abc subject;
@Mock
private Context mContext;
@Before
public void setUp() {
subject = new Abc();
}
@Test
public void testJob() {
JobScheduler scheduler = mock(JobScheduler.class);
JobInfo pendingJob = mock(JobInfo.class)
when(mContext.getSystemService(JOB_SCHEDULING_SERVICE)
.thenReturn(scheduler);
when(scheduler.getPendingJob(Job.POLLING_JOB_ID)).thenReturn(pendingJob);
Abc.JobPerformer.job(mContext);

verify(scheduler).getPendingJob(Job.POLLING_JOB_ID);
}

正如你所看到的,我不需要嘲笑Abc类。

您正试图在一个模拟类上调用一个方法。您需要一个要测试的类的真实实例。

最新更新