Есть ли способ передать и тип и строку к параметрическому тестовому тесту Google использования.
Я хотел бы сделать:
template <typename T>
class RawTypesTest : public ::testing::TestWithParam<const char * type> {
protected:
virtual void SetUp() {
message = type;
}
};
TEST_P(RawTypesTest, Foo) {
ASSERT_STREQ(message, type);
ParamType * data = ..;
...
}
Заранее спасибо
Тесты с параметризацией значений не работают для передачи информации о типе; вы можете сделать это только с типизированными или параметризованными типами тестов.В обоих случаях вам придется упаковать информацию о типе и строке в специальные структуры. Вот как это сделать с помощью тестов с параметризацией типа :
template <typename T> class RawTypesTest : public testing::Test {
public:
virtual void SetUp() {
this->message_ = TypeParam::kStringValue;
}
protected:
const char* const message_;
}
TYPED_TEST_CASE_P(RawTypesTest);
TYPED_TEST_P(RawTypesTest, DoesFoo) {
ASSERT_STREQ(message, TypeParam::kStringValue);
TypeParam::Type* data = ...;
}
TYPED_TEST_P(RawTypesTest, DoesBar) { ... }
REGISTER_TYPED_TEST_CASE_P(FooTest, DoesFoo, DoesBar);
И теперь вам нужно определить структуры параметров и создать для них экземпляры тестов:
struct TypeAndString1 {
typedef Type1 Type;
static const char* kStringValue = "my string 1";
};
const char* TypeAndString1::kStringValue;
struct TypeAndString2 {
typedef Type1 Type;
static const char* kStringValue = "my string 2";
};
const char* TypeAndString2::kStringValue;
typedef testing::Types<TypeAndString1, TypeAndString2> MyTypes;
INSTANTIATE_TYPED_TEST_CASE_P(OneAndTwo, RawTypeTest, MyTypes);
Вы можете использовать макрос, чтобы упростить определение вашего типы параметров:
#define MY_PARAM_TYPE(name, type, string) \
struct name { \
typedef type Type; \
static const char kStringValue = string; \
}; \
const char* name::kStringValue
Тогда определения структур параметров станут намного короче:
MY_PARAM_TYPE(TypeAndString1, Type1, "my string 1");
MY_PARAM_TYPE(TypeAndString2, Type2, "my string 2");
Это довольно сложно, но нет простого способа сделать это. Мой лучший совет - попробовать перефакторить ваши тесты, чтобы не требовать информацию как о типе, так и о значении. Но если нужно, вот способ.