给代码写测试通常是测试代码的最好方法。因为写出来的测试可以一遍又一遍地执行。当你修改了实现,你可以再次运行测试来检查一下你是否引入了任何bug。这种方法可以将你从调试中拯救出来,并引领你生产出具有更低错误倾向的代码。
作为一个一般的方针,在开发你的测试的时候,我们建议你不要把结果打印到屏幕上;而是,根据输入数据,用asserts创建一个后置条件指明期望得到哪些输出数据。
如果你在运行测试时把结果打印到了屏幕上,开始时你会去分析这些结果。然而,随着时间延长,你会越来越不注意这些打印到屏幕上的数据。即使数据指出了一个错误,你也可能不会意识到。
此外,如果别的人试着运行测试,他们不得不首先弄明白这些打印出来的数据是什么意思,这可能要花不少时间。反过来,如果你用了asserts,人们就只要去运行你的测试。如果发生了错误,他们会被提示在哪一行发生了错误,他们就可以去修正它。
这儿是一个测试例程的例子:
#include <string>
#include <assert.h>
// 整理一个字符串的前导和追尾空白,
// 返回整理后的字符串
std::string trim_spaces( const std::string & str)
{
/* trim_spaces 的实现*/
}
void testTrimSpaces()
{
assert( trim_spaces( " abc")
== "abc");
assert( trim_spaces( "def ")
== "def");
assert( trim_spaces( " this
is a test ") == "this is a test");
assert( trim_spaces( "") == "");
assert( trim_spaces( " ")
== "");
}
在本文的下一部分,我们将向你展示怎样标准化和运行你的测试。