这不是一个问题,而是一段知识分享。
根据GoogleMock的FAQ,无法模拟可变参数函数,因为不知道函数将传递多少个参数。
虽然如此,在大多数情况下,我们都知道系统测试下调用可变参数函数的变量数量或者如何将可变参数转换为一个非可变参数。
我的一位同事(我不知道他是否在Stackoverflow上活跃)提出了一个可行的解决方案,如以下示例所示(使用C类型接口的模拟):
class MockInterface
{
public:
MockInterface() {}
~MockInterface() {}
MOCK_METHOD4( variadicfunction, void( const std:: string name, AN_ENUM mode,
const std::string func_name, const std::string message ) );
};
boost::shard_ptr<MockInterface> mock_interface;
extern "C"
{
void variadicfunction( const char *name, AN_ENUM mode,
const char *func_name, const char *format, ... )
{
std::string non_variadic("");
if (format != NULL )
{
va_list args;
va_start( args, format );
// Get length of format including arguments
int nr = vsnprintf( NULL, 0, format, args );
char buffer[nr];
vsnprintf( buffer, nr+1, format, args );
non_variadic = std::string( buffer );
va_end( args );
}
mock_interface->variadicfunction( name, mode, func_name, non_variadic );
}
}
希望这对你有所帮助。
non_variadic
的转换,这也是可以完成的。在此处可以查看完整的示例:https://dev59.com/p3kPtIcB2Jgan1znl3qj#73613788 - Ari