Junit-test af en klasse kræver objekter af andre klasser
Jeg har en klasse defineret som sådan:
public class Monster { public static final int ARENA_SIZE = 480; public int health; //can be negative since it will then be removed public int speed; public int counter; public int x; //current position public int y; //current position public mapObject next; public void nextAlgorithm(mapObject[][] map) { aNode[][] aNodeMap = newANodeMap(map); //1. create a new aNodeMap PriorityQueue<aNode> pq = newPriorityMap(aNodeMap[this.x][this.y]); //2. create a new priority queue with starting point added aNode current; while (pq.isEmpty() == false) { current = pq.poll(); if (endPointReached(current.x, current.y)) //3. Is the end point reached? break; aNode[] neighbours = findNeighbour(current.x, current.y, aNodeMap); //4. The end point isn't reached, find me the neigbours for (aNode neighbour : neighbours) //5. process all my neighbours processNeighbour(current, neighbour, pq); } next = updateNext(aNodeMap[ARENA_SIZE - 1][ARENA_SIZE - 1], this.x, this.y); //6. Update my next after all these work }
Kort sagt er der en algoritme, der kræver input fra en anden klasse, mapObject, som også er en anden selvskrevet pakke af mig.
Mit spørgsmål er, bortset fra
import MapObject.*;
i junit, der giver mig mulighed for at initialisere et armatur i
@Before
Er der nogen bedre måder?
Svar
Det er sandsynligvis bedre at oprette input-objektet (dvs. mapObject[][]
) i selve testcasen i stedet for i en @Before
metode. Dette giver dig mulighed for at oprette flere testcases med forskellige inputobjekter.
Dvs.
@Test void testWithSpecificArrayConfiguration1() { mapObject[][] objectConfig1 = createConfig1(); testMonster.nextAlgorith(objectConfig1); // verification steps for config 1 } @Test void testWithSpecificArrayConfiguration2() { mapObject[][] objectConfig2 = createConfig2(); testMonster.nextAlgorith(objectConfig2); // verification steps for config 2 }
Som en note føles det ikke rigtigt, at inputtet er en mapObject
, men den faktiske algoritme virker på en aNode[][]
; men det er svært at sige uden at kende konteksten af koden.