gpt4 book ai didi

c++ - 在 googlemocks EXPECT_CALL 中匹配 std::wstring

转载 作者:行者123 更新时间:2023-11-30 05:20:09 33 4
gpt4 key购买 nike

我有模拟界面

// Interface
class MyInterface
{
void get(const std::wstring& param) = 0;
}

// Mock interface
class MyInterfaceMock : public MyInterface
{
MOCK_METHOD1(get, void(const std::wstring& param));
}

示例测试方法:

...
EXPECT_CALL(myInterfaceMock, L"hello");

当我编译它时 (vs2015) 我收到消息

error C2664: 'testing::internal::MockSpec...: 无法将参数 1 从 'const wchar_t [6]' 转换为 'const testing::Matcher &'

随后是消息:原因:无法从 'const wchar_t [7]' 转换为 'const testing::Matcher'

当我使用 std::string 而不是 std::wstring 时,一切正常。有人知道为什么 std::wstring 无法匹配吗?

最佳答案

我猜你的意思是 EXPECT_CALL(myInterfaceMock, get(L"hello"));

你应该写EXPECT_CALL(myInterfaceMock, get(std::wstring(L"hello")));一切都应该有效。

真正的问题是为什么匹配器来自 std::string接受 const char*作为值(value)。答案是——因为 google-mock 库有意支持这一点——参见 code :

template <>
class GTEST_API_ Matcher<std::string>
: public internal::MatcherBase<std::string> {
public:
Matcher() {}

explicit Matcher(const MatcherInterface<const std::string&>* impl)
: internal::MatcherBase<std::string>(impl) {}
explicit Matcher(const MatcherInterface<std::string>* impl)
: internal::MatcherBase<std::string>(impl) {}

template <typename M, typename = typename std::remove_reference<
M>::type::is_gtest_matcher>
Matcher(M&& m) // NOLINT
: internal::MatcherBase<std::string>(std::forward<M>(m)) {}

// Allows the user to write str instead of Eq(str) sometimes, where
// str is a string object.
Matcher(const std::string& s); // NOLINT

// Allows the user to write "foo" instead of Eq("foo") sometimes.
Matcher(const char* s); // NOLINT
};

Matcher<T> 没有等效的特化对于 std::wstring .我建议你不要添加一个——因为它将来可能会改变——这是 gmock 实现细节。相反,您可能会要求 gmock 开发人员添加对 wstring 的支持与 string 类似...顺便说一句,我已经添加了one .

关于c++ - 在 googlemocks EXPECT_CALL 中匹配 std::wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40807081/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com