Bonjour
Sur un code pré-existant, je dois appliquer des unit tests avec cppUnits.
Une classe me laisse dubitatif :
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:
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; }
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) :koi:Code:
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++; } }
A quoi est dû ce phénomène et comment le solutionner ?
@++