В моем большинстве проектов на С++ я сильно использовал оператор ASSERTION следующим образом:
int doWonderfulThings(const int* fantasticData)
{
ASSERT(fantasticData);
if(!fantasticData)
return -1;
// ,,,
return WOW_VALUE;
}
Но сообщество TDD, похоже, любит делать что-то вроде этого:
int doMoreWonderfulThings(const int* fantasticData)
{
if(!fantasticData)
return ERROR_VALUE;
// ...
return AHA_VALUE;
}
TEST(TDD_Enjoy)
{
ASSERT_EQ(ERROR_VALUE, doMoreWonderfulThings(0L));
ASSERT_EQ(AHA_VALUE, doMoreWonderfulThings("Foo"));
}
Просто с моим опытом первые подходы позволяют мне удалить так много тонких ошибок. Но подходы TDD - очень умная идея для обработки устаревших кодов.
"Google" - они сравнивают "ПЕРВЫЙ МЕТОД" с "Прогуливаться по берегу с живым жилетом, плавать в океане без какой-либо безопасной охраны".
Какой из них лучше? Какой из них делает программное обеспечение надежным?