Hversu meiri snilld getur jmock verið?
final Folder folder = context.mock(Folder.class);
final Message message1 = context.mock(Message.class);
final Message message2 = context.mock(Message.class);
final Message[] mesages = new Message[]{ message1, message2 };
context.checking(new Expectations()
{
{
one(folder).getMessage();
will(returnValue(messages));
}
});
Segjum að við vildum sannreyna lógík sem við forrituðum gagnvart JavaMail API. Þá myndum við setja upp ákveðnar væntingar eins og hér að ofan og keyra síða forritið okkar m.t.t. væntinganna og staðfesta þær, t.d. með því að keyra forritið með junit og skilgreina nokkrar væntingar til útkomu á forritinu, en junit og jmock haldast nokkuð vel í hendur.
Við myndum þurfa að bæta við nokkrum skilgreiningum eins og t.d.
one(message1).getSubject();
will(returnValue("Lottery Winner"));
one(message2).getSubject();
will(returnValue("Vandræði með ruslpóst"));
Þá gæti ruslvörnin sem við vorum að skrifa ákvarðað að pósturinn geymdur í þessu pósthólfi innihéldi einn varhugaverðan póst. Það er að segja, ef við hefðum verið að skrifa alvöru ruslvörn og við hefðum gefið okkur gáfulegri forsendur fyrir því að finna ruslpóst heldur en bara subject reitinn í póstum.
Með þessum aðferðum getum við keyrt ruslvörnina gagnvart pósthólfi sem við byggjum upp í einingaprófunum, þ.e. án þess að vera með pósthólf með gögnum sérstaklega til að geta prófað forritið sem við erum að þróa.
Ég bendi áhugasömum á að kynna sér junit/jmock combo-ið í gegnum vefsíðurnar sem ég benti á fyrr í greininni og vona að þessi litla grein verði til þess að fólk fái áhuga fyrir því að skrifa og sannreyna forritin sín á sem skynsamlegastan máta sem umhverfin sem þeir eru að vinna í bjóða upp á. Það er síðan efni í aðra grein að útskýra mikilvægi allra prófana, ekki einungis einingaprófana.
Update: Gúndi greip villu í kóðadæmunum. Lagað eftir auganu.