C++ 如何测试包含随机值的字符串?
我的模拟类如下所示:C++ 如何测试包含随机值的字符串?,c++,gmock,C++,Gmock,我的模拟类如下所示: struct StringEater { MOCK_CONST_METHOD1( ExecuteCommand, void( const char* ) ); }; 字符串由不变的部分和我不能在测试中设置的小部分组成。大概是这样的: 命令825已完成 但也有可能 命令123完成 或“命令”+任何数字+“完成” 始终调用mock类中的方法 那么,我如何设置测试?这显然不能用于: StringEater mock; EXPECT_CALL( mock, Execut
struct StringEater {
MOCK_CONST_METHOD1( ExecuteCommand, void( const char* ) );
};
字符串由不变的部分和我不能在测试中设置的小部分组成。大概是这样的:
命令825已完成
但也有可能
命令123完成
或“命令”+任何数字+“完成”
始终调用mock类中的方法
那么,我如何设置测试?这显然不能用于:
StringEater mock;
EXPECT_CALL( mock, ExecuteCommand( StrEq( expectedJsonCmd ) ) ).Times( 1 );
我需要为配对者准备什么
这项工作(感谢J):
因此,它将始终是字符串
“Command”
,后跟整数,后跟字符串“finished”
然后可以通过尝试从字符串中提取这三个部分,将第一部分和第三部分与预期的字符串进行比较来测试
差不多
std::istringstream iss(the_input_string);
std::string s1, s3;
int i2;
if (iss >> s1 >> i2 >> s3)
{
if (s1 == "Command" && s3 == "finished")
{
// Test succeeded
}
else
{
// Test failed
}
}
else
{
// Failed, not correct format
}
您可以尝试使用regexp,检查字符串是否以“Command”开头,以“finished”结尾,并将数字作为一个组提取出来 另一篇文章中也描述了类似的问题:
这非常简单,必须有一个陷阱。。。这里的具体要求是什么?我简直不敢相信一个高级软件工程师和一个6年的兽医会用36k不知道如何解析一个惊人的规则字符串。@J。。。从字面上说,从来没有正则表达式。尝试使用
MatchesRegex
但失败:(@J…好的,通过一些修复,我成功了。谢谢,但为什么不回答?因为,这基本上是:另外,您没有包括您尝试过的内容以及为什么它不起作用,不清楚确切的要求是什么(数字是否表示“整数”?区分大小写?可变空白?等等).这是一个薄弱的问题…也值得知道什么平台你的目标是.gmock中的正则表达式严重缺乏平台间的一致性。实际上字符串更复杂,也不是那么简单。我正在寻找一个gmock匹配器来测试该字符串。现在我正在考虑使用StartsWith
和EndsWith
,但我希望有人能提出更好的建议。
std::istringstream iss(the_input_string);
std::string s1, s3;
int i2;
if (iss >> s1 >> i2 >> s3)
{
if (s1 == "Command" && s3 == "finished")
{
// Test succeeded
}
else
{
// Test failed
}
}
else
{
// Failed, not correct format
}