Difference between revisions of "Tópicos sobre escrita de testes com JUnit/Album (JUnit example)"

From Wiki**3

< Tópicos sobre escrita de testes com JUnit
(How to Compile and Run)
(Class Album)
Line 35: Line 35:
  
 
<java5>
 
<java5>
 +
import java.util.Collections;
 +
import java.util.LinkedList;
 +
import java.util.List;
 +
import java.util.TreeMap;
 +
 +
/**
 +
* An album is built around a tree map, so that card order can be used.
 +
*/
 +
public class Album {
 +
 +
/**
 +
* The card collection.
 +
*/
 +
private TreeMap<Integer, Card> _cards = new TreeMap<Integer, Card>();
 +
 +
/**
 +
* @return sorted list (comparable cards).
 +
*/
 +
public List<Card> getAll() {
 +
List<Card> lst = new LinkedList<Card>();
 +
lst.addAll(_cards.values());
 +
Collections.sort(lst);
 +
return lst;
 +
}
 +
 +
/**
 +
* Store a card. If a card has a number already in the tree, it replaces the
 +
* old one (alternatively, we could refuse storing a card with an existing
 +
* number).
 +
*
 +
* @param card
 +
*/
 +
public void add(Card card) {
 +
_cards.put(card.getId(), card);
 +
}
 +
 +
/**
 +
* Remove a card.
 +
*
 +
* @param id
 +
*            card number
 +
*/
 +
public void remove(int id) {
 +
_cards.remove(id);
 +
}
 +
 +
}
 
</java5>
 
</java5>
  

Revision as of 18:12, 25 October 2009

Problema

Considere uma caderneta de cromos. Os cromos têm um número e uma imagem. Não é necessário modelar a imagem, considere a imagem como sendo uma instância da seguinte classe:

<java5> class Image { /* conteúdo omitido */ } </java5>

A caderneta guarda os cromos pela ordem de numeração e não permite guardar cromos repetidos. É possível adicionar cromos a uma caderneta (método add) e é possível remover um cromo se for indicado o seu número (método remove). Duas cadernetas dizem-se iguais (equals) se tiverem o mesmo número de cromos (independentemente das características dos cromos individuais). É possível obter uma lista ordenada (por número) contendo os cromos de uma caderneta (método getAll).

  1. Modele e implemente as classes dos cromos (Card) e da caderneta (Album) (pode utilizar classes do pacote de colecções do Java).
  2. Escreva uma classe de teste que contenha um teste
    • que verifique se a inserção de um cromo na caderneta funciona; e outro
    • que verifique as propriedades associadas ao método equals.

Solução

Class Image

This is a very simple and uninteresting class.

<java5> public class Image {

} </java5>

Class Card

<java5> </java5>

Class Album

<java5> import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.TreeMap;

/**

* An album is built around a tree map, so that card order can be used.
*/

public class Album {

/** * The card collection. */ private TreeMap<Integer, Card> _cards = new TreeMap<Integer, Card>();

/** * @return sorted list (comparable cards). */ public List<Card> getAll() { List<Card> lst = new LinkedList<Card>(); lst.addAll(_cards.values()); Collections.sort(lst); return lst; }

/** * Store a card. If a card has a number already in the tree, it replaces the * old one (alternatively, we could refuse storing a card with an existing * number). * * @param card */ public void add(Card card) { _cards.put(card.getId(), card); }

/** * Remove a card. * * @param id * card number */ public void remove(int id) { _cards.remove(id); }

} </java5>

How to Compile and Execute

Compilation

  • javac Image.java
  • javac Card.java
  • javac Album.java
  • javac -cp /usr/share/java/junit.jar:. AlbumTest.java

Execution

  • java -cp /usr/share/java/junit.jar:. junit.textui.TestRunner AlbumTest