在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