2017-02-22 4 views
0

Hallo Jungs, so habe ich diesen KonstruktorEXPECT_THROW - Aktuell: es eine andere Art wirft, testet Google

`Matrix::Matrix(size_t row, size_t col) 
{ 
    if(row < 1 || col < 1) 
    throw new std::runtime_error("Minimalni velikost matice je 1x1"); 
    matrix = std::vector<std::vector<double> >(row,std::vector<double>(col, 0)); 
}` 

und diesen Test

`Matrix *TestedMatrix; 
EXPECT_THROW(TestedMatrix = new Matrix(-2,3),std::runtime_error);` 

aber im immer noch, dass exepction bekommen ist von einem anderen Typ. Ich habe auch versucht std::runtime_error*, aber das Ergebnis ist das gleiche. Ich wollte zuerst EXPECT_ANY_THROW verwenden, aber es wurde nicht in meiner Codeabdeckung angezeigt. Danke für die Hilfe ! :)

+0

'size_t (-2)' ist nicht kleiner als 1! size_t ist unsigned type - lesen Sie über https://cs.wikipedia.org/wiki/Dvojkov%C3%BD_dopln%C4%9Bk – PiotrNycz

+0

soweit ich das hier erraten kann - was Sie wirklich bekommen ist 'std :: bad_alloc' – PiotrNycz

Antwort

3

Rufen Sie nicht new.

Matrix::Matrix(size_t row, size_t col) 
{ 
    if(row < 1 || col < 1) 
    throw std::runtime_error("Minimalni velikost matice je 1x1"); 
    matrix = std::vector<std::vector<double> >(row,std::vector<double>(col, 0)); 
} 

new ein void* zurückkehren wird, weshalb Sie bekommen „Ausnahme ist von einem anderen Typ“ Fehler.

+0

Ja danke für Ihre Antwort. Das Problem ist, dass ich den Code nicht ändern kann. Ich tue gerade Tests, also hast du irgendeine Idee, wie man das mit dem Anrufen von neuem löst? – Crky

+0

Können Sie 'EXPECT_THROW versuchen (TestedMatrix = neue Matrix (-2,3), void *);'? –

+0

Nein, es funktioniert nicht. Alsa kann ich dich fragen, ob es besser ist, Matrix * TestedMatrix oder Matrix Tested Matrix zu verwenden. Was ist besser mit dem Testen mit Zeiger oder umgekehrt. Vielen Dank. – Crky

Verwandte Themen