【发布时间】:2010-09-06 05:47:11
【问题描述】:
在我最常使用的 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 方法是处理遗留代码的非常聪明的想法。
“Google”——他们将“FIRST METHOD”比作“穿着救生衣走在岸边,在没有任何安全防护的情况下畅游大海”。
哪个更好? 哪一个让软件变得健壮?
【问题讨论】:
标签: c++ tdd defensive-programming