Я пишу модульные тесты для проверки различных путей кода с участием фабричного класса.
Фабрика возвращает std::unique_ptr
базовому типу:
class Base {};
class Derived1 : public class Base {};
class Derived2 : public class Base {};
std::unique_ptr<Base> Type::Factory(enum rtype) const {
switch(rtype) {
case d1: return std::make_unique<Derived1>();
case d2: return std::make_unique<Derived2>();
default: return std::make_unique<Derived1>();
}
}
Поэтому в тесте я хочу убедиться, что возвращается правильный тип (фабрики являются рассадником ошибок вырезания и вставки).
Есть ли способ проверить, какой тип возвращается? Это: EXPECT_TRUE(typeid(Derived1), typeid(type.get());
ложно, потому что type.get()
принадлежит Base
, а не rtype
, которое было передано.
typeid(*type.get())
, он проверит динамический тип, нет? - person underscore_d   schedule 15.06.2020default
возвращаетDerived1
, выглядит пугающе. - person Ted Lyngmo   schedule 15.06.2020