在我的大部分C++项目中,我经常使用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方法是处理遗留代码的非常聪明的想法。
“谷歌”-他们将“第一种方法”比作“在有救生衣的情况下走过海岸线,在没有任何安全保护的情况下游泳大洋”。
哪一个更好? 哪一个使软件更加健壮?