Bonjour

Sur un code pré-existant, je dois appliquer des unit tests avec cppUnits.
Une classe me laisse dubitatif :
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
 
class Spectrum: public std::vector<Dot>
{
Spectrum();
public: 
void addPoint(const Dot& point);
Spectrum& clone();
}
 
void Spectrum::addPoint(const Dot& point)
{
	push_back(point);
}
 
Spectrum& Spectrum::clone()
{
	return *this;
}
Et voici ce que je veux évaluer dans l'un de mes tests unitaires (NB: on suppose que pour le Spectrum s, j'ai appelé le constructeur et celui-ci lui met déjà un point de coordonnées (1,2):
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
 
void SpectrumTest::setUp(){
	s = Spectrum();
	s.addPoint(Dot(1,2));
}
 
void SpectrumTest::cloneTest(){
	s.addPoint(Dot(1, 2));
	s.addPoint(Dot(3, 4));
	s.addPoint(Dot(5, 6));
	s.addPoint(Dot(7, 1));
	Spectrum s1 = s.clone();
	CPPUNIT_ASSERT_EQUAL(s.size(), s1.size());
	std::vector<Dot>::iterator it = s.begin();
	std::vector<Dot>::iterator it1 = s1.begin();
	while(it != s.end()) {
    	Dot d = *it;
    	Dot d1 = *it1;
    	CPPUNIT_ASSERT_EQUAL(d.getX(), d1.getX());
    	CPPUNIT_ASSERT_EQUAL(d.getY(), d1.getY());*/
    	it++;
  	}
}
Dans cette méthode, effectivement, le premier vecteur reçoit bien les objets Dot (ie des points). Mais, à l'appel de la méthode clone(), le second vecteur reçoit bien 5 points mais TOUS avec les coordonnées (1,2)

A quoi est dû ce phénomène et comment le solutionner ?

@++