C ++, google test / mock: утверждение для проверки и тип объекта - PullRequest
5 голосов
/ 06 августа 2011

У меня есть это (не совсем, это простой пример):

template<class T> 
T foo() {...}

Мне нужно проверить тип результата функции (здесь нет никакого смысла, я обещаю, что мой пример более сложный), поддерживает ли Google test / mock такое утверждение?

Я пытаюсь EXPECT_THAT с A , но я не могу заставить это работать.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 августа 2011

Google Test для тестов во время выполнения.Тип функции определяется во время компиляции, до того, как Google Test когда-либо введет изображение.

Вы можете использовать result_of и утверждать, что значение typeid такое же, что-то вроде этого:*

Другой вариант - отказаться от явного тестирования типа возвращаемого значения и просто использовать функцию, как ожидается, что она будет использоваться.Если с возвращаемым типом что-то не так, компилятор сообщит вам еще до того, как вы попробуете запустить тест.В любом случае это, вероятно, лучше, чем требовать один конкретный тип возврата;например, если возвращаемый тип оказывается long вместо ожидаемого int, но все остальные ваши тесты по-прежнему проходят, тогда действительно ли int действительно так важен?

3 голосов
/ 20 августа 2013

Вы можете использовать :: testing :: StaticAssertTypeEq (); с std :: result_of . Вы также можете использовать типизированные тесты . Полный пример:

#include <type_traits>
template<class T>
T foo(int) {...}

///Boilerplate code for using several types
template <typename T>
class ResultTest : public testing::Test {}
typedef ::testing::Types<float, double, int, char*, float**> MyTypes; //Types tested!
TYPED_TEST_CASE(ResultTest , MyTypes);

///Real test
TYPED_TEST(ResultTest , ResultTypeComprobation) {
    //It will be checked at compile-time. 
    ::testing::StaticAssertTypeEq<TypeParam, std::result_of(foo<TypeParam>)>(); 
}

Однако тест будет запущен и будет выполняться во время выполнения, ничего не делая. Странно, но я не мог найти ничего лучше.

...