Bonsoir,

Je suis actuellement en train de développer en Java un petit exercice qu'on a à faire dans le cadre d'un module de S3. Avec mon binôme, on a créé des exceptions personnalisées, jusque là, pas de soucis, et les profs nous ont demandé de programmer également les tests unitaires. Sauf que là, on fait face à bien des soucis : on a une méthode calculMoyenne(Matiere) dans une classe Etudiant qui se charge de calculer la moyenne d'un étudiant dans une matière appartenant à sa formation.
Pour cela, voici notre classe Etudiant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
 
package code;
import java.util.*;
 
public class Etudiant {
 
	private Identite id;
	private Formation form;
	private HashMap<Matiere,ArrayList<Integer>> notes;
 
	public Etudiant(Identite id,Formation f) {
		this.id=id;
		this.form=f;
		this.notes=new HashMap<Matiere,ArrayList<Integer>>();
		Set<Matiere> s = f.getMatieres().keySet();
		for (Matiere m :s) {
			notes.put(m, new ArrayList<Integer>());			
		}
	}
 
	public void ajouterNote(Matiere m, Integer note) {
		if(notes.containsKey(m)) {
			if(note<20 && note>0) {
				notes.get(m).add(note);
			}
		}
	}
 
	public double calculeMoyenne(Matiere m) throws MatiereAbsenteException, NotesAbsentesException {
		int total = 0;
		ArrayList<Integer> notesM = this.notes.get(m);
		if(notesM.size()==0) {
			throw new NotesAbsentesException(m);
		}
		if(!this.notes.containsKey(m)) {
			throw new MatiereAbsenteException();
		}
		for (Integer integer : notesM) {
				total += integer;
		}
		return total/notesM.size();
	}
 
	public double calculeMoyenneGenerale() {
		int total = 0;
		Set<Matiere> s = this.notes.keySet();
		int coeff = 0;
		int sommeCoeff = 0;
		for (Matiere m :s) {
			try {
				coeff = form.getCoefficient(m);
				sommeCoeff+=form.getCoefficient(m);
				total += calculeMoyenne(m)*coeff;
			} catch (MatiereAbsenteException mae) {
				mae.printStackTrace();
			} catch (NotesAbsentesException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return total/sommeCoeff;
	}
 
	public Identite getId() {
		return id;
	}
 
	public void setId(Identite id) {
		this.id = id;
	}
 
	public Formation getForm() {
		return form;
	}
 
	public void setForm(Formation form) {
		this.form = form;
	}
 
	public HashMap<Matiere, ArrayList<Integer>> getNotes() {
		return notes;
	}
 
	public void setNotes(HashMap<Matiere, ArrayList<Integer>> notes) {
		this.notes = notes;
	}
 
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((form == null) ? 0 : form.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((notes == null) ? 0 : notes.hashCode());
		return result;
	}
 
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Etudiant other = (Etudiant) obj;
		if (form == null) {
			if (other.form != null)
				return false;
		} else if (!form.equals(other.form))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (notes == null) {
			if (other.notes != null)
				return false;
		} else if (!notes.equals(other.notes))
			return false;
		return true;
	}
 
}
Et on ne sait pas comment traiter les deux exceptions pouvant être levées par la méthode calculMoyenne(Matiere) dans JUnit ! Nous savons faire avec une, mais pas deux, et apparemment, ça ne fonctionne pas de la même manière, puisque ça ne fonctionne pas. D'autre part, chose plutôt étonnante, lorsque j'essaie de ne traiter qu'une exception, Eclipse, l'IDE que nous utilisons, nous signale une erreur de type "Unhandled exception type MatiereAbsenteException" (un de nos 2 exceptions personnalisées).

Merci de bien vouloir nous aider, nous sommes désespérés !