桩模块和驱动模块对于测试和调试使用函数的程序是非常有用的工具。它们允许测试程序中的单个函数,隔离调用该函数的程序部分。
桩模块(Stub)是一个被调用的虚拟函数,而不是它所代表的实际函数。它通常显示一个测试消息,确认它已被调用,然后就没有其他了。
例如,如果在某个程序中使用了一个桩模块用于代替 showFees 函数,那么它可能如下所示:
// showFees函数的桩模块
void showFees(string memberType, double rate, int months)
{
cout << "The function showFees was called with arguments:\n"<< "Member type: "<< memberType << endl << "rate: " << rate << endl << "months: " << months << endl;
}
桩模块一旦建立,程序就可以使用此桩模块而不是实际的 showFees 函数来模拟运行程序。因此,通过使用桩模块替换实际的函数,可以将测试工作集中在调用该函数的程序部分。
最主要的是,桩模块允许程序员在需要时确定程序是否正在调用一个函数,并确定有效值是否被传递给该函数。如果桩模块代表了返回值的函数,那么它应该返回一个测试值,这有助于确认返回值将被正确处理。
当调用函数的程序部分被调试到满意时,程序员就可以继续测试和调试实际的函数本身,而这正是驱动模块变得有用的地方。
驱动模块(Driver)是通过简化调用来测试函数的程序。如果函数接收任何实参,驱动模块会传递测试数据。如果函数返回一个值,驱动模块会在屏幕上显示返回值。这样就可以在隔离程序的其余部分的情况下,让程序员看到被测试函数的执行方式。
因此,驱动模块的作用是用来彻底测试函数,它可以使用不同的测试值作为实参重复调用函数。当函数能够按照目标要求执行时,即可将其放入实际的程序中。