Ich muss überprüfen, ob eine Methode von einer statischen Methode aufgerufen wird.
// 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);
}
}
Mein getesteter Code: Ich möchte überprüfen, ob die jobScheduler-Instanz, wenn sie nicht null ist, getPendingJob () aufruft.
@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.
}
Hinweis: PerformJob ist eine statische Klasse
Die Fehlermeldung lautet: "Gesucht, aber nicht aufgerufen ... Tatsächlich gibt es keine Interaktion mit diesem Modell."
Was ist hier falsch? Warum ist die Überprüfung fehlgeschlagen? Bitte helfen Sie. Ich bin Neuling. Ich habe nach den gleichen Arten von Problemen gesucht, kann aber keine ähnlichen Problemlösungen finden. Warten auf Hilfe. Vielen Dank
Das erste ist, dass Sie die PerformJob
Klasse und die Klasse, die die Klasse enthält, nicht verspotten müssen PerformJob
.
Beachten Sie Folgendes: Angenommen, Sie haben eine Klasse namens Abc
und innerhalb der Abc
Klasse eine statische Klasse namens, JobPerformer
die eine statische Methode enthält, die job
wie folgt aufgerufen wird:
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);
}
}
}
}
In der Testklasse brauchen Sie nur noch Folgendes:
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);
}
Wie Sie sehen können, muss ich mich nicht über die Abc-Klasse lustig machen.
Sie versuchen, eine Methode für eine verspottete Klasse aufzurufen. Sie benötigen eine echte Instanz der Klasse, die Sie testen möchten.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen