将Google模拟匹配器描述为std :: string

亚历克斯·史托夫

我的问题(针对住院患者)

给定一个google-mock匹配器,我想将其描述为一个字符串。例如:

std::string description = DescribeMatcher(Ge(0)) // puts "size is > 0" in the string

有人知道这样做的简单方法吗?在googlemock文档中未找到任何内容。我自己这样做的:

template<typename T, typename S>
std::string DescribeMatcher(S matcher)
{
    Matcher<T> matcherCast = matcher;
    std::ostringstream os;
    matcherCast.DescribeTo(&os);
    return os.str();
}

背景

我想写我自己的基于另一个的匹配器。我的匹配器匹配一个字符串,该字符串表示具有指定大小的文件的名称。

MATCHER_P(FileSizeIs, sizeMatcher, std::string("File size ") + DescribeMatcher(sizeMatcher))
{
    auto fileSize = fs::file_size(arg);
    return ExplainMatchResult(sizeMatcher, fileSize, result_listener);
}

这是一个用法示例:

EXPECT_THAT(someFileName, FileSizeIs(Ge(100)); // the size of the file is at-least 100 bytes
EXPECT_THAT(someFileName, FileSizeIs(AllOf(Ge(200), Le(1000)); // the size of the file is between 200 and 1000 bytes

问题出在MATCHER_P宏的最后一个参数中。我希望FileSizeIs基于的描述sizeMatcher但是,我在googlemock中未找到任何此类函数,因此必须自己编写。

爱田

创建嵌套匹配器时,我遇到了类似的问题。我的解决方案使用MatcherInterface而不是MATCHER_P。对于您的情况,这将类似于:

template <typename InternalMatcher>
class FileSizeIsMatcher : public MatcherInterface<fs::path> {
public:
    FileSizeIsMatcher(InternalMatcher internalMatcher)
            : mInternalMatcher(SafeMatcherCast<std::uintmax_t>(internalMatcher))
    {
    }
    bool MatchAndExplain(fs::path arg, MatchResultListener* listener) const override {
        auto fileSize = fs::file_size(arg);
        *listener << "whose size is " << PrintToString(fileSize) << " ";
        return mInternalMatcher.MatchAndExplain(fileSize, listener);
    }

    void DescribeTo(std::ostream* os) const override {
        *os << "file whose size ";
        mInternalMatcher.DescribeTo(os);
    }

    void DescribeNegationTo(std::ostream* os) const override {
        *os << "file whose size ";
        mInternalMatcher.DescribeNegationTo(os);
    }
private:
    Matcher<std::uintmax_t> mInternalMatcher;
};

template <typename InternalMatcher>
Matcher<fs::path> FileSizeIs(InternalMatcher m) {
    return MakeMatcher(new FileSizeIsMatcher<InternalMatcher>(m));
};

例:

TEST_F(DetectorPlacementControllerTests, TmpTest) {
    EXPECT_THAT("myFile.txt", FileSizeIs(Lt(100ul)));
}

给出输出:

Value of: "myFile.txt"
Expected: file whose size is < 100
Actual: "myFile.txt" (of type char [11]), whose size is 123 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将std :: string分解为std :: string

来自分类Dev

如何将std :: string分解为std :: string

来自分类Dev

将std :: String覆盖为char *

来自分类Dev

在定义期间将std :: string设置为0与将std :: string设置为0

来自分类Dev

将std :: string的元素解析为整数(C ++)

来自分类Dev

如何将DWORD和LPBYTE解析为std :: string

来自分类Dev

使用 assimp 将网格导入为 std::string

来自分类Dev

将Platform :: String转换为std :: string

来自分类Dev

将 string::iterator 转换为 std::string

来自分类Dev

将Json解析为Map <String,String>

来自分类Dev

将std :: string移入捕获

来自分类Dev

将Json解析为String

来自分类Dev

如何将std :: string指针转换为std :: string

来自分类Dev

将array <String ^> ^转换为std :: vector <std :: string>

来自分类Dev

无法将std :: string设置为等于另一个std :: string的第零个索引

来自分类Dev

将std :: vector <std :: string>传递为C样式字符串的数组(char **)

来自分类Dev

将String转换为HashMap <String,String []>

来自分类Dev

具有自定义分配器的std :: string

来自分类Dev

无法将预期类型“IO [String]”与实际类型“[String]”匹配

来自分类Dev

将HashMap <String,String>转换为HashMap <String,List <String >>()

来自分类Dev

将HashMap <String,String>转换为HashMap <String,List <String >>()

来自分类Dev

打印新行时std :: string为空

来自分类Dev

模拟String.valueof()

来自分类Dev

如何使用LINQ将<string,list <string >>减少为<string,string>?

来自分类Dev

作为Groovy中String到String列表的Map,如何将String映射为String?

来自分类Dev

将std :: string转换为v8 :: string

来自分类Dev

将 Windows::Foundation::IAsyncOperation<String^>^ 转换为 std::string

来自分类Dev

为什么Boost.Spirit可以正确地将标识符解析为std :: string而不是解析为仅由std :: string组成的适应结构?

来自分类Dev

std :: string :: assign与std :: string :: operator =

Related 相关文章

  1. 1

    如何将std :: string分解为std :: string

  2. 2

    如何将std :: string分解为std :: string

  3. 3

    将std :: String覆盖为char *

  4. 4

    在定义期间将std :: string设置为0与将std :: string设置为0

  5. 5

    将std :: string的元素解析为整数(C ++)

  6. 6

    如何将DWORD和LPBYTE解析为std :: string

  7. 7

    使用 assimp 将网格导入为 std::string

  8. 8

    将Platform :: String转换为std :: string

  9. 9

    将 string::iterator 转换为 std::string

  10. 10

    将Json解析为Map <String,String>

  11. 11

    将std :: string移入捕获

  12. 12

    将Json解析为String

  13. 13

    如何将std :: string指针转换为std :: string

  14. 14

    将array <String ^> ^转换为std :: vector <std :: string>

  15. 15

    无法将std :: string设置为等于另一个std :: string的第零个索引

  16. 16

    将std :: vector <std :: string>传递为C样式字符串的数组(char **)

  17. 17

    将String转换为HashMap <String,String []>

  18. 18

    具有自定义分配器的std :: string

  19. 19

    无法将预期类型“IO [String]”与实际类型“[String]”匹配

  20. 20

    将HashMap <String,String>转换为HashMap <String,List <String >>()

  21. 21

    将HashMap <String,String>转换为HashMap <String,List <String >>()

  22. 22

    打印新行时std :: string为空

  23. 23

    模拟String.valueof()

  24. 24

    如何使用LINQ将<string,list <string >>减少为<string,string>?

  25. 25

    作为Groovy中String到String列表的Map,如何将String映射为String?

  26. 26

    将std :: string转换为v8 :: string

  27. 27

    将 Windows::Foundation::IAsyncOperation<String^>^ 转换为 std::string

  28. 28

    为什么Boost.Spirit可以正确地将标识符解析为std :: string而不是解析为仅由std :: string组成的适应结构?

  29. 29

    std :: string :: assign与std :: string :: operator =

热门标签

归档