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ă:
Reprezintǎ un framework de Unit Testing pentru Java.
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:
@Test
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.assert
:assertTrue
assertFalse
assertEquals
assertNull
/assertNotNull
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 }