在Google Mock中使用wxString

使用Google Mock与wxWidgets一起使用有没有人有过运气? 我有一个带有setter的Foo类,在签名中采用对wxString的const引用,如下所示:

class Foo {
public:
    Foo();
    virtual ~Foo();
    void setName(const wxString& name);
};

然后我继续像这样模拟Foo:

class MockFoo : public Foo {
    MOCK_METHOD1(setName, void(const wxString& name));
};

我的其他模拟工作正常,但有一些关于它不喜欢的wxString参数。 当我编译时,我看到以下内容:

C:gmock-1.6.0gtestincludegtestinternalgtest-internal.h:890: error: conversion from `const wxUniChar' to `long long int' is ambiguous
C:wxWidgets-2.9.0includewxunichar.h:74: note: candidates are: wxUniChar::operator char() const
C:wxWidgets-2.9.0includewxunichar.h:75: note:                 wxUniChar::operator unsigned char() const
//more potential candidates from wxUniChar follow after that

jist是Google Mock无法确定调用哪个operator()函数,因为wxUniChar提供的operator()函数没有映射到Google Mock所期望的。 我看到'long long int'和'testing :: internal :: BiggestInt'转换的错误。


这必须是使用代理类wxUniCharRef作为wxUniCharRef wxString::operator[]()的结果类型的结果wxString::operator[]()有关更多详细信息,请参阅wxString文档的“不知情的陷阱”一节),但我不确定关于它究竟是从哪里来的,因为在这里似乎没有任何代码访问wxString字符。 gtest-internal.h的第890行究竟是什么?

此外,你说你正在使用一个const引用wxString,但你的代码没有。 我认为这与您的问题无关,但在描述和代码片段之间存在这种差异,这是令人困惑的......


以下对wxUniChar头文件的补充似乎有效:

wxUniChar(long long int c) { m_value = c; }

operator long long int() const { return (long long int)m_value; }

wxUniChar& operator=(long long int c) { m_value = c; return *this; }

bool operator op(long long int c) const { return m_value op (value_type)c; }

wxUniCharRef& operator=(long long int c) { return *this = wxUniChar(c); }

operator long long int() const { return UniChar(); }

bool operator op(long long int c) const { return UniChar() op c; }

我将它们插入到头文件的相应部分,编译错误消失了。 如果我有时间以后,如果这听起来像是一个合理的解决方案,我将用一些单元测试来为wxWidgets打补丁。

链接地址: http://www.djcxy.com/p/27921.html

上一篇: Using wxString with Google Mock

下一篇: When should I really use noexcept?