Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何测试包含随机值的字符串?_C++_Gmock - Fatal编程技术网

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
}