Unit test eksempel

Dette eksempel tager udgangspunkt i vores Venner og Bekendte projekt.

Først laves klassen *ContainerTest*, som vi tilføjer to metoder til. Den første metode er *addThreeElements()*, og den sørger for at lægge nogle venner i en container, så vi har noget at teste på. Den anden metode er *testGetElement()*, som fejler, når vi kører programmet, fordi *assertEquals* ikke modtager, hvad den forventer, fordi godt nok eksisterer metoden *getElement(int* *i)* ovre i klassen *Container* (metoden er autogenereret), men den indeholder ikke andet end *return null*.

Nu fylder vi så indhold i *getElement(int i)*, så den gør, hvad vi ønsker - altså returnerer elementet på plads *i* i vores container.

Nu vil vi så have en metode, som kan fortælle, hvor stor en given container er, og vi laver derfor en test i klassen *ContainerTest*, som tester efter den ønskede funktion. Inden programmet køres laves der endnu en gang en autogenereret metode i klassen *Container*.

Som forventet fejler metoden *testSize()*, da *size()* blot indeholder *return null*. Vi erstatter derfor *return null*, med koden svarende til den ønskede funktion, og programmet kan så køres uden at fejle.

Indtil videre har vi blot antaget, at metoden *addElement(T s)* fungerer hensigtsmæssigt, men dette kan vi også teste. I klassen *ContainerTest* tilføjes metoden *TestAddElement()*, og programmet køres uden at melde fejl.

Hvis man ønsker, at metoden fejler, kan man udkommenterer eller slette indholdet af metoden *addElement(T s)*, og derefter kører programmet.

Alle tre tests fejler nu, fordi de alle afhænger af metoden *addElement(T s)*, men ser vi specifikt på metoden *testAddElement()*, forventer den at få 1 returneret fra *size()*, men i dette tilfælde får den 0, fordi der simpelthen ikke er blevet tilføjet noget til containeren.

**Koden:**

```
package dataTest;

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import data.Container;
import logic.Ven;

public class ContainerTest {
 @Test
 public void testGetElement() {
 Container<Ven> container = new Container<>();
 addThreeElements(container);
 Ven ven = container.getElement(0);
 assertEquals("Should be Ven1", "Ven1", ven.getNavn());
 ven = container.getElement(1);
 assertEquals("Should be Ven2", "Ven2", ven.getNavn());
 ven = container.getElement(2);
 assertEquals("Should be Ven3", "Ven3", ven.getNavn());
 }

 @Test
 public void testSize() {
 Container<Ven> container = new Container<>();
 addThreeElements(container);
 assertEquals("Should be 3", 3, container.size());
 }

 @Test
 public void testAddElement() {
 Container<Ven> container = new Container<>();
 container.addElement(new Ven("Ven4", "ven4@ven.com", "12345604", "Test"));
 assertEquals("Should be 1", 1, container.size());
 }

 private void addThreeElements(Container<Ven> container) {
 //addElement(new Ven("navn", "email", "telefonnr.", "relation"));
 container.addElement(new Ven("Ven1", "ven1@ven.com", "12345601", "Test"));
 container.addElement(new Ven("Ven2", "ven2@ven.com", "12345602", "Test"));
 container.addElement(new Ven("Ven3", "ven3@ven.com", "12345603", "Test"));
 }
}

package data;

import java.util.ArrayList;
import java.util.List;

public class Container<T> {
 private List<T> liste = new ArrayList<T>();

 public void addElement(T s) {
 liste.add(s);
 }

 public T getElement(int i) {
 return liste.get(i);
 }

 public int size() {
 return liste.size();
 }
}

```