risorse | good unit tests

Good Unit Tests /21

Questa breve parte (la ventunesima; qui l'elenco delle precedenti) risolve un piccolo baco relativo alla presentazione dei valori di tipo const char*.

Il problema si presenta nel momento in cui il framework deve rappresentare un valore nullo per un puntatore di tipo const char*, ad esempio nel caso:

const char* fn() { return nullptr; }

TEST("123")
{
    CHECK(fn() != nullptr);
}

L'effetto è catastrofico:

Segmentation fault (core dumped)

Il problema è che la procedura di renderizzazione non gestisce correttamente il caso del puntatore nullo:

std::string toString(const char* value) {
  return std::string("\"") + value + "\"";
}

Aggiungendo il trattamento esplicito del caso, il problema sparisce:

std::string toString(const char* value) {
  return value ? std::string("\"") + value + "\"" : "<nullptr>";
}
...

/* output:
 *
 * example.cpp(80) : [error] fn() != nullptr evaluates to <nullptr> != <nullptr>
 */

Codice sorgente



Pagina modificata il 30/04/2018