2016-11-25 10 views
1

У меня есть издевались интерфейсMatching станд :: wstring в googlemocks EXPECT_CALL

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

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

Exemplaric Метод испытания:

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

Когда я скомпилировать его (vs2015) Я получаю сообщение

ошибка C2664: 'testing :: internal :: MockSpec ...: невозможно преобразовать аргумент 1 из' const wchar_t [6] 'в' const testing :: Matcher & '

с последующим сообщением: Причина: не удается преобразовать из «сопзЬ wchar_t [7]» к «сопзЬ тестирования :: Matcher»

Когда я использую станд :: строка вместо станд :: wstring на все отлично работает. Кто-нибудь знает, почему std :: wstring не может быть сопоставлен?

+0

какая версия google-mock? Текущий? – PiotrNycz

+0

Я использую gmock-1.6.0 – anhoppe

ответ

1

Я предполагаю, что вы имели в виду EXPECT_CALL(myInterfaceMock, get(L"hello"));

Вы должны написать EXPECT_CALL(myInterfaceMock, get(std::wstring(L"hello"))); все должно работать.

Настоящий вопрос, почему помощник от std::string принимает const char* как стоимость. Ответ - потому что Google-макет библиотека поддерживается это по намерению - см code:

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

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

    // Allows the user to write str instead of Eq(str) sometimes, where 
    // str is a string object. 
    Matcher(const internal::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 ... BTW, я уже добавил one.

+0

Отличный ответ, спасибо. Это все объясняет. И, кстати, я имел в виду EXPECT_CALL (myInterfaceMock, get (L "hello")); – anhoppe