= JUnit =
* Responsabil: Cristina Coman * Data publicării: 3.11.2013 * Data ultimei modificări: 4.11.2013
Scopul acestui laborator este familiarizarea studenţilor cu noţiunea de Unit Testing şi folosirea unui framework Junit pentru realizarea testǎrii.
Unit testing-ul s-a impus în ultima perioadă în dezvoltarea proiectelor scrise în limbajul Java şi nu numai, pe măsura apariţiei unor utilitare gratuite de testare a claselor, care au contribuit la creşterea vitezei de programare şi la micşorarea drastică a numărului de bug-uri.
Printre avantajele folosirii framework-ului JUnit se numără: * îmbunătăţirea vitezei de scriere a codului, concomitent cu creşterea calităţii acestuia * clasele de test sunt uşor de scris şi modificat pe măsură ce codul sursă se măreşte, putând fi compilate împreună cu codul sursă al proiectului. * clasele de test JUnit pot fi rulate automat (în suită), rezultatele fiind vizibile imediat. * clasele de test măresc încrederea programatorului în codul sursă scris şi îi permit să urmărească mai uşor cerinţele de implementare ale proiectului * testele pot fi scrise înaintea implementǎrii, fapt ce garanteazǎ înţelegerea funcţionalitǎţii de cǎtre dezvoltator
Reprezintǎ un framework de Unit Testing pentru Java.
=Exemplu=
public class Student { private String name; private String age; public Student(String name, String age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
import java.util.ArrayList; import java.util.List; public class Grupa { List<Student> students; Grupa () { students = new ArrayList<Student>(); } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } public void addStudent(Student student) { students.add(student); } public Student getStudent(String name) { for (Student st : students) { if (null != st.getName() && st.getName().equals(name)) { return st; } } return null; } public boolean areStudentsInGroup() { if (students.size() == 0) { return false; } return true; } }
import org.junit.Assert; import org.junit.Before; public class Test { private Grupa grupa; @Before public void setup() { grupa = new Grupa(); } @org.junit.Test public void testNoStudentInGroup() { Assert.assertEquals(false, grupa.areStudentsInGroup()); } @org.junit.Test public void testAddStudent() { Student st = new Student("Elena", "11"); grupa.addStudent(st); Assert.assertTrue(grupa.getStudent("Elena").equals(st)); } }
Observaţii:
* fiecare metodǎ de test are adnotarea: @Test
* metodele setUp
(avand adnotarea: @Before
) si tearDown
(@After
) se apeleazǎ înainte, respectiv dupǎ fiecare test. Se întrebuinţeazǎ pentru iniţializarea/eliberarea resurselor ce constituie mediul de testare, evitându-se, totodatǎ, duplicarea codului, şi respectându-se principiul de independentǎ a testelor.
* pentru compararea rezultatului aşteptat cu rezultatul curent se folosesc apeluri assert
:
assertTrue
assertFalse
assertEquals
assertNull
/assertNotNull
* Rulare teste: Click dreapta clasǎ test → Run as → Junit test * Rulare test: Selectare test → click dreapta → Run as → Junit test
Pentru a importa un jar într-un proiect din eclipse parcurgeţi urmǎtorii paşi: click dreapta proiect → Build path → Configure build path → Libraries → Add jars (Add external jars)
Animal
şi clasa Zoo
. Clasa Zoo
conţine un vector de animale. Implementaţi metodele: addAnimal(Animal a)
, removeAnimal(Animal a)
, boolean areAnimals(), getAnimals()
, size()
. Creaţi o clasa Test
unde veţi verifica diverse scenarii:Zoo
.testAddAnimal
- adaugă un obiect Animal
şi verificǎ daca adǎugarea a avut loc cu succes. Folosiţi: assertEquals
testRemoveAnimal
- folosiţi assertTrue
testAreAnimalsInZoo
- testul picǎ dacǎ metoda returneazǎ false
. Hint: Assert.fail()
testGetAnimals
- adǎugaţi douǎ obiecte Animal
. Verificaţi ca adǎugarea a avut loc cu succes. Folosiţi assertFalse.GeometricForms
avand un constructor ce primeste un String ce poate fi unul din valorile enum-ului Forms
.isTriangle
, isCircle
si isRectangle
au drept scop evaluarea stǎrii obiectului GeometricForms
.GeometricFormsTest
.public enum Forms { TRIANGLE, CIRCLE, RECTANGLE }
* Schelet * Soluții * Junit download