2012-02-22 2 views
3

Я проверяю, вызывает ли мой класс метод на издеваемом классе с правильным аргументом. Я установил основное математическое ожидание:googlemock matcher для выходных параметров

// mListener is a mocked object 
// This expectation accepts any argument 
EXPECT_CALL(this->mListener, OnChanged(_)) 
    .Times(1); 

Это прекрасно, но я также хочу проверить аргумент. Это объект, который имеет только аксессор, которые используют параметры вывода:

// aValue is an output parameter 
HRESULT get_Value(int* aValue); 

Как я могу определить Сличитель, который будет проверять значение, которое get_Value ставит в aValue?

ответ

3

Вы могли бы попробовать что-то вроде:

MATCHER_P(CheckValue, 
      expected_value, 
      std::string("get_Value ") 
       + (negation ? "yields " : "doesn't yield ") 
       + PrintToString(expected_value) 
       + " as expected.") { 
    int result; 
    arg.get_Value(&result); 
    return expected_value == result; 
} 

, которые могли бы проверить, что, например, aValue == 7:

EXPECT_CALL(this->mListener, OnChanged(CheckValue(7))) 
    .Times(1); 
+0

Отлично, спасибо! На странице кулинарной книги googlemock есть информация о пользовательских сопоставлениях: http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Parameterized_Matchers_Quickly –

+0

Также я добавил некоторый пользовательский код печати, чтобы, когда тест не прошел, я получаю несколько цифр, а не первые несколько байтов моего объекта. http://code.google.com/p/googletest/wiki/AdvancedGuide#Teaching_Google_Test_How_to_Print_Your_Values –

Смежные вопросы