wiki:SelfEvaluation/SEDN/Testing

Спецификација за тестирање на SelfEvaluation модулот – дел од Integrated Student Information System


Според официјалната документација на OpenXava, платформата која се користи за градење на овој модул, тестирањето на кодот кој е генериран од страна на OpenXava се тестира со JUnit (во позадина OpenXava всушност користи HtmlUnit). Со тоа што прави екстензија на JUnit и користи HtmlUnit, се овозможува автоматизирано тестирање на функционалноста на модулот со тоа што се симулира активностите што би ги правел корисник со помош на веб пребарувач. При пишувањето на кодот за тестирање ја употребувам ModuleTestBase класата која ги автоматизира акциите кои се преземаат врз пребарувач на SelfEvaluation модулот.

Опфатот на тест случаите и тест активностите во рамки на автоматизираниот дел за тестирање, кои се опишани детално во оваа спецификација, се функционалностите кои се наложени и детализирано објаснети во корисничките сценарија – “Пополнување на анкета” и “Преглед на резултати од анкета” и нивните соодветни UML дијаграми, во прилог на овој документ.


Опис на тестови за пополнување на анкета


Сите тестови кои служат за проверка за соодветната работа на функционалноста на пополнување на анкета се наоѓаат во класата PopolniAnketaTest. Тестовите се дефинирани така што се прави проверка на нормалното извршување на овој дел од модулот кога делумно/целосно се пополнува анкета и невалидно се пополнува прашање. Со цел подобра структурираност на кодот, се користат помошни методи кои исто така се дефинирани во оваа класа и во прилог се објаснети заедно со тестовите. Во Prerequisites секцијата се опишани и кои податоци се потребни во базата на податоци за успешно тестирање на функционалноста.

  • Конструктор

super(nameTest, "SelfEvaluation", "PopolniAnketa") се наведува името на OpenXava проектот и името на соодветната класа (module – според OpenXava терминологија).

  • Prerequisites

Анкета со атрибути (id, popolneta) = (118, false);
Прашање со атрибути (id, odgovoreno, anketa_id) = (100, false, 118);
Прашање со атрибути (id, odgovoreno, anketa_id) = (101, false, 118);
Одговор со атрибути (id, count, prasanje_id) = (104, 0, 100);
Одговор со атрибути (id, count, prasanje_id) = (106, 0, 101);
Одговор со атрибути (id, prasanje_id) = (105, 100);
Одговор со атрибути (id, prasanje_id) = (107, 101);
Вредностите за останатите атрибути за анкетата и за било кое од прашањата и одговорите се по избор на креаторот.

  • Помошни методи

tearDown() – Oвој метод е дел од класата ModuleTestBase и се извршува после секој од тестовите. Го вклучува методот resetAnketa() кој исто така се извршува после секој тест.

resetAnketa() – Овој метод е исклучително создаден да се извршува после секој од тестовите и неговата цел е да ги ресетира атрибутите кои ни се од интерес за анкетата, прашањата и одговорите дефинирани погоре. Конкретно користи setPopolneta(false) за анкетата, setOdgovoreno(false) за двете прашања, како и setCount(0) за секој од одговорите. Сето ова, за секој нареден тест од PopolniAnketaTest да се извршува на ресетирана, незагадена анкета.

getPrvoPrasanje() – Од база го враќа прашањето со id = 100;

getVtoroPrasanje() - Од база го враќа прашањето со id = 101;

getPrvOdgovor() – Од база го враќа одговорот со id = 104;

getVtorOdgovor() – Од база го враќа одговорот со id = 106;

  • Тестови

testOtvoriAnketaZaPopolnuvanjeIVratiSeNaListaAnketi() – execute("CRUD.new"), пандан на клик на копчето за создавање на нова анкета од страна на анкетарот. choosePerson() – се избира анкетар, addBasicProperties() се додаваат назив и опис на анкетата, chooseSubject(), се избира предмет за кој важи анкетата која се создава. save(), веќе објаснета, пандан на клик на копчето “Save”, анкетата се зачувава, во овој метод има и метод кој се повикува и тој метод е assertNoErrors(), што значи дека оваа акција треба да заврши без грешки. Успешното поминување на овој тест значи да се создаде анкета со предмет, анкетар, назив и опис, да се зачува во база и притоа да нема никакви грешки.

testBasicCreateValidation() – Се тестира валидацијата која подразбира да се внесени назив, опис, и да е избран предмет. Се испробувааат повеќе варијанти кои користат веќе објаснети методи и затоа нема да навлегувам во многу детали околу нив. Првата варијанта е анкетарот да го избере копчето за создавање на нова анкета, и да го избере копчето за зачувување се очекува да се појават две грешки при успешното работење на софтверот, а тие се дефинираат со методите assertError("Vnesete naziv i opis") и assertError("Value for Subject in Anketa is required"). Грешките се за празни полиња за назив и опис и неизбирање на предмет, соодветно. Доколку се појават овие две грешки до овој чекор тестот е успешен. Втората варијанта подразбира избирање на копчето за нова анкета, избирање на предмет со методот chooseSubject(), избирање на копчето за зачувување по што треба да следува грешка, а тоа се проверува со повикување на методот assertError("Vnesete naziv i opis"). Доколку се појави оваа грешка (и претходната) до овој чекор тестот е успешен. Во наредната варијанта се внесува негов идентификатор од база (choosePerson()), се избира копчето за зачувување и очекуваните грешки се за непостоење на назив и опис и неизбран предмет, а се проверуваат со assertError("Vnesete naziv i opis") и assertError("Value for Subject in Anketa is required"). До овој чекор тестот е успешен доколку се појават овие две грешки (и претходните). Наредната варијанта предвидува избор на personId, и избор на предмет по што се избира копчето за зачувување и се очекува една грешка да се појави и таа грешка е "Vnesete naziv i opis". Тестот е успешен до овој чекор доколку се појави оваа грешка (и претходните). Последната варијанта опфаќа внесување негов personId, внес на назив и опис на анкетата, клик на копчето за зачувување и се очекува грешката "Value for Subject in Anketa is required", бидејќи не е избран предмет. Тестот е успешен доколку се појави оваа грешка и сите грешки од претходните варијанти. testCreateWithPregledRezultatiOnly() – Овој метод го тестира создавањето на валидна анкета, за која се внесени лица со привилегии за преглед, не се внесени прашања и одговори. Валидна анкета има назив, опис, предмет. Во рамки на овој метод се се извршува акцијата за клик на копчето “New”, се избира анкетар, се внесува назив и опис, се избира предмет. Сите овие акции се извршуваат со веќе опишани методи во оваа спецификација, потоа се повикува методот addPregledRezultati() кој е веќе опишан во спецификацијава во делот “Помошни методи”. На крај се повикува методот assertNoErrors(), што значи овој тест е успешен доколку не се јави грешка за време на извршувањето на акциите кои се дефинирани во него.

testCreateWithPrasanjeiOdgovoriOnly() – Овој метод создава валидна анкета која нема лица со привилегии за преглед на резултатите, но има едно прашање со два одговори, кое е валидно. Валидната анкета подразбира внесени назив, опис, предмет. Во методот се повикуваат веќе опишани методи, односно, се врши најава, се клика на копчето “New”, се избира, анкетар, се внесуваат опис, назив, предмет, се внесува прашање со два одговори, со повик на addPrasanjeiOdgovori(). На крај се повикува методот assertNoErrors(), што подразбира да се изврши овој тест без никаква грешка во апликацијата. Тестот е успешен доколку се извршат сите дефинирани акции без да се појави грешка во текот на извршувањето во апликацијата.

testCreateWithPrasanjeiOdgovoriOnlyValidation() – Овој метод тестира дали правилно работи валидацијата на анкетата при создавање на анкета за која не се поставени лица со привилегии за преглед, но има едно валидно прашање кое содржи два понудени одговори. За тестирање на валидацијата од сите можни аспекти се извршуваат три варијанти и успешноста на тестот зависи од тоа дали ќе се појават соодветните грешки при валидација за секоја варијанта. Најпрво се извршува методот execute("CRUD.new"), односно, клик на копчето “New” за создавање нова анкета, по што се извршуваат методите choosePerson(), addBasicProperties(), со што се додава анкетар и се додаваат назив и опис. Потоа со execute("Collection.new", "viewObject=xava_view_section0_prasanja"), се симулира акција на клик на копчето “New” од табот за внес на прашања. Со setValue("prasanje", "Test prasanje") се внесува текст на прашањето “Test prasanje”. execute("Collection.new", "viewObject=xava_view_odgovori") со овој метод, кој се повикува следно, се симулира акција на клик на копчето “New” за додавање на нов одговор од дијалог прозорецот за внес на прашања. setValue("odgovor", "Test odgovor 1"), се симулира внес на текст “Test odgovor 1”. execute("Collection.saveAndStay"), потоа се симулира клик на копчето за зачувување и останување. Нормалната функционалност после клик на ова копче налага за нотификација за грешка во корисничкиот интерфејс, и затоа со методот assertError("Value for Subject in Anketa is required") налагаме дека тестот до овој чекор е успешен доколку се појави грешката "Value for Subject in Anketa is required". Доколку не се појави оваа грешка и се појави било што друго тестот е неуспешен. Со повикување на методот execute("Collection.hideDetail"), се симулира затворање на дијалог прозорецот за внес на одговор. И со уште еден повик на execute("Collection.hideDetail"), кој следува, се симулира затворање на дијалог прозорецот за внес на прашања. Бидејќи наредните варијанти се многу слични на првата во овој метод, нема да навлегувам во многу детали и опис на методите, разликите се во внесот на податоците во создавањето на анкетата. Втората варијанта опфаќа симулирање на копчето за создавање на нова анкета, се внесува анкетар и предмет, се симулира клик на копчето за внес на ново прашање, во полето за внес на прашање се симулира внес на “Test prasanje”, потоа се симулира клик на копчето за внес на нов одговор, се внесува одговорот "Test odgovor 1", се симулира клик на копчето за зачувување и останување. Со методот assertError("Vnesete naziv i opis") се очекува да се појави грешката "Vnesete naziv i opis" и доколку не се појави оваа и само оваа грешка, и секако не помине првата варијанта тестот ќе биде неуспешен. Се повикува методот за затворање на дијалог прозорец два пати. Третата варијанта ги опфаќа симулација на клик на копчето за внесување на нова анкета, се внесува само анкетар, се симулира клик на копчето за внес на ново прашање, се симулира внес на текстот “Test prasanje”, се симулира клик на копчето за внес на нов одговор, се внесува одговорот "Test odgovor 1", и се симулира клик на копчето за зачувување и останување, по што со методите assertError("Vnesete naziv i opis") и assertError("Value for Subject in Anketa is required"), се очекува да се појават грешките "Vnesete naziv i opis", “Value for Subject in Anketa is required", доколку се појават овие две грешки после оваа акција и само овие две грешки и минатите две варијанти поминале тестот се прогласува за успешен. Се повикува методот за затворање на дојалог прозорец два пати.

testCreateWithPregledRezultatiOnlyValidation() – Овој метод ја тестира валидацијата на анкетата која се создава кога дополнително се внесуваат лица со привилегии за преглед на резултати, а не прашања и одговори. Има три можни варијанти и сите три користат методи кои се веќе објаснети. Се симулира клик на копчето за создавање на нова анкета, се симулира одбирање на анкетар од опаѓачката листа, се симулира внес на назив и опис на анкетата, и внес на лица со привилегии за преглед на резултати со повик на методот addPregledRezultati(). Очекуваната грешка што треба да се појави после извршувањето на овие акции е "Value for Subject in Anketa is required". Доколку оваа грешка не се појави тестот не е успешен. Се повикува метод за затворање на дијалог прозорец. Во втората варијанта повторно се симулира клик на копчето за создавање нова анкета, се симулира внес на анкетар, предмет и лица со привилегии за преглед на резултати, очекуваната грешка е "Vnesete naziv i opis". Доколку се појави оваа и само оваа грешка после акцијата од втората варијанта оваа варијанта поминува. Во третата варијанта се симулира клик на копчето за создавање на нова анкета, внес на анкетар, лица со привилегии за преглед на резултати. Се очекуваат грешките "Vnesete naziv i opis" и "Value for Subject in Anketa is required". Доколку после акциите од третата варијанта се појават овие и само овие две грешки и претходните две варијанти поминале успешно тестот е успешен.

testFullCreate() – Овој метод тестира создавање на “целосна”, валидна анкета. Се симулира клик на копчето за создавање на нова анкета, внес на анкетар, назив опис, предмет, прашање со два одговори, лице со привилегии за преглед на крај од методот се очекува да не се појави никаква грешка со методот assertNoErrors(). Овој тест е успешен доколку се извршат сите акции коректно, односно после (или во текот на) нивното извршување не се појави никаква грешка.


Опис на тестови за активирање на анкета


  • Конструктор

super(nameTest, "SelfEvaluation", "AnketaActivations") - се наведува името на OpenXava проектот и името на соодветната класа (module – според OpenXava терминологија).

  • Помошни методи

chooseValidAnketa() – Овој метод содржи метод setValue("anketa.id", "115") кој од опаѓачко мени симулира избор на анкетата со id 115. Потребно е во база да се има запис на анкета со id 115. Овде може да се стави id на било кој запис од анкета во база, бидејќи во база се запишуваат само валидни анкети, односно анкети со назив, опис и избран предмет.

chooseAnketaWithoutQuestions() - Овој метод содржи метод setValue("anketa.id", "116") кој од опаѓачко мени симулира избор на анкетата со id 116. Потребно е во база да се има запис на анкета со id 116. Анкетата со ова id нема никаков внес на прашања, може да се стави било кое id, но мора анкетата со тоа id, да нема никаков запис на прашања во база.

chooseAnketaWithNonValidAnswers() - Овој метод содржи метод setValue("anketa.id", "117") кој од опаѓачко мени симулира избор на анкетата со id 116. Потребно е во база да се има запис на анкета со id 117. Конкретната анкета со ова id има три записи на прашања во база од кои едно има само еден понуден одговор, односно не е валидно, додека другите две имаат по два понудени одговори. Може да се стави id на било која друга анкета која има едно невалидно прашање (може и повеќе но во тој случај ќе мора да се изврши промена на параметарот на assertError("Sekoe prasanje mora da ima minimum po 2 ponudeni odgovori, 1 prasanja ne zadovoluvaat uslov") методот каде “1” ќе се промени во бројот на прашања кои се внесени и имаат помалку од два понудени одговори во база).

chooseDates(Date af, Date at) – Овој метод како параметри прима два датуми, и повикува два методи кои симулираат избор на датуми од календар. Датумите што се симулира дека се избираат од календарите се датумите што се внесуваат како параметри.

  • Тестови

testValidAnketaValidDates() – Овој метод служи за проверка на активирање на анкета со валидни датуми. “Датумот од” е датумот што следува два дена од моменталниот датум на повикување на кодот. Додека “датумот до” е датумот што следува десет дена од моменталниот датум на повикување на кодот. Деновите се арбитрарни и можат да бидат било кои број на денови се додека бројот на денови од моменталниот датум за “датум од” е помал од тие денови по кој што ќе следува “датумот до” и “датум од” е после моменталниот. Се повикува методот chooseDates(Date af, Date at), со соодветните датуми како параметри. Се повикува методот chooseValidAnketa(), со методот execute(""MyTypical.save"") се симулира клик на копчето за зачувување и со методот assertNoErrors() се очекува да не се појави никаква грешка. Овој тест е успешен доколку не се појави грешка.

testValidAnketaNonValidDates() – Со овој метод се тестира активирање на валидна анкета која нема валидни датуми. Постојат повеќе варијанти на невалидни датуми и сите се тестираат со овој тест. Процедурата за тестирање за активација на анкета со невалидни датуми за секоја варијанта на невалидни датуми е идентична и затоа ќе ја опишам само еднаш. Најпрво се симулира клик на копчето за ново активирање на анкета, се повикуваат методите chooseDates() и chooseValidAnketa(). Се симулира клик на копчето за зачувување и се очекува една иста грешка кај секоја од варијантите со методот assertError("Activefrom teba da e pred activeto i posle denesniot datum!"), грешката е ("Activefrom teba da e pred activeto i posle denesniot datum!". За датумот да е валиден треба “датум од” да е помал од “датумот до” и “датум од” да е после моменталниот. Варијантите се следни: датумот од да е моменталниот датум, а датумот до да е датум што е десет дена од моменталниот, датум од да е десет дена пред моменталниот и датум до да е десет дена после моменталниот, датум од да е десет дена пред моменталниот и датум до да е пет дена пред моменталниот, датум од и датум до да се моменталниот датум, датум од да е десет дена после моменталниот датум и датум до да е пет дена после моменталниот датум, датум од да е десет дена пред моменталниот датум и датум до да е моменталниот датум. После извршувањето на секоја од варијантите треба да се појави грешката "Activefrom teba da e pred activeto i posle denesniot datum!" со цел тестот да е успешен.

testAnketaWithoutQuestionsValidDates() – Со овој метод се тестира активирање на анкета која е валидна, но без прашања и има валидни датуми. На почеток се симулира клик на копчето за ново активирање на анкета, датумот од се поставува на пет дена после денешниот датум, а датумот до се поставува на десет дена после денешниот датум и се симулира нивното избирање со повик на методот chooseDates(active_from, active_to), и потоа се повикува методот chooseAnketaWithoutQuestions(), по што се симулира клик на копчето за зачувување. Тестот е успешен доколку се појави една грешка а таа е "Vnesete barem edno prasanje" и се проверува со методот assertError("Vnesete barem edno prasanje").

testAnketaWithoutQuestionsNonValidDates() – Овој тест проверува активирање на анкета без внесени прашања и невалидни датуми. На почеток се симулира клик на копчето за ново активирање на анкета, датумот од се поставува на десет дена после денешниот датум, а датумот до се поставува на пет дена после денешниот датум и се симулира нивното избирање со повик на методот chooseDates(active_from, active_to), и потоа се повикува методот chooseAnketaWithoutQuestions(), по што се симулира клик на копчето за зачувување. Тестот е успешен доколку се појават две грешки, а тие е "Vnesete barem edno prasanje" и се проверува со методот assertError("Vnesete barem edno prasanje") и "Activefrom teba da e pred activeto i posle denesniot datum!" која се проверува со методот assertError("Activefrom teba da e pred activeto i posle denesniot datum!").

testAnketaWithoutValidAnswersValidDates() – Со овој метод се проверува активирање на анкета која има прашање со невалидни одговори, односно има помалку од два понудени одговори и има валидни датуми. На почеток се симулира клик на копчето за ново активирање на анкета, датумот од се поставува на пет дена после денешниот датум, а датумот до се поставува на десет дена после денешниот датум и се симулира нивното избирање со повик на методот chooseDates(active_from, active_to), и потоа се повикува методот chooseAnketaWithNonValidAnswers(), по што се симулира клик на копчето за зачувување. Тестот е успешен доколку се појави една грешка, а таа е "Sekoe prasanje mora da ima minimum po 2 ponudeni odgovori, 1 prasanja ne zadovoluvaat uslov" и се проверува со методот assertError("Sekoe prasanje mora da ima minimum po 2 ponudeni odgovori, 1 prasanja ne zadovoluvaat uslov").

testAnketaWithoutValidAnswersNonValidDates() - Со овој метод се проверува активирање на анкета која има прашање со невалидни одговори, односно има помалку од два понудени одговори и има невалидни датуми. На почеток се симулира клик на копчето за ново активирање на анкета, датумот од се поставува на десет дена после денешниот датум, а датумот до се поставува на пет дена после денешниот датум и се симулира нивното избирање со повик на методот chooseDates(active_from, active_to), и потоа се повикува методот chooseAnketaWithNonValidAnswers(), по што се симулира клик на копчето за зачувување. Тестот е успешен доколку се појават две грешки, а тие се "Sekoe prasanje mora da ima minimum po 2 ponudeni odgovori, 1 prasanja ne zadovoluvaat uslov" и се проверува со методот assertError("Sekoe prasanje mora da ima minimum po 2 ponudeni odgovori, 1 prasanja ne zadovoluvaat uslov") и "Activefrom teba da e pred activeto i posle denesniot datum!" која се проверува со методот assertError("Activefrom teba da e pred activeto i posle denesniot datum!").

Last modified 6 years ago Last modified on 05/21/19 21:42:37
Note: See TracWiki for help on using the wiki.