La fonction qui doit être testé est:C++ comment tester la fonction pour lui faire jeter une erreur?
int hire(Payroll * p) throw(out_of_range, logic_error)
{
// error if no holes left
if (staffcount == MAX_EMPLOYEES)
throw (out_of_range("Hire: Too many employees"));
// spin down holes looking for a hole.
for (int i = 0; i < MAX_EMPLOYEES; ++i) {
Payroll *current = staff[i].get(); // get the pointer
if (current == 0) { // it is empty
appay newpay(p); // convert *Payrollto auto_ptr
staff[i] =newpay;
staffcount++; // one more staff
return i; // return index
} else {
// do nothing. Hole is filled
}
}
// should never get here
throw (logic_error("no holes, but count ok")); }
Je suis en mesure de le tester en lançant une erreur out_of_range
, mais je ne peux pas penser à tout logic_error
.
Voici mon test dans le principal out_of_range
:
try {
for (int i = 0; i<11; i++){
hr.hire(new Payroll("Prog M. Er", 55757575));
hr.showAllStaff(" after hires");
}
} catch (out_of_range e) {
cout << "Out of range error: " << e.what() << endl;
cout << "DEBUG: carry on processing - line 177 was tested\n";
}
Toute aide sur la façon d'écrire un test logic_error pour cette fonction serait grandement apprécié! Merci.
A
Les spécifications d'exception en C++ sont quelque peu brisées: http://www.gotw.ca/publications/mill22.htm –
On dirait que vous définissez MAX_EMPLOYEES sur 2 et que vous essayez d'embaucher un 3e employé.Je ne pense pas que cela devrait être une erreur de logique, mais plutôt un débordement. –
C'est vrai Thomas. Et je trouve difficile de trouver une erreur de logique pour cela. J'ai besoin de créer un test pour cette fonction où je lance des erreurs (des deux types). Dites-moi si vous pouvez penser à autre chose. Je vous remercie. Adri – Adri