我有一个单元测试,看起来像这样:
typedef boost::variant<std::vector<std::string, ...> > Container;
TEST_F (TestAppend, emptyContainer)
{
Container container((std::vector<std::string>()));
Append append("stringValueToAppend");
boost::apply_visitor(append(), container);
...
}
我需要测试容器是否仍然是已应用访问者的std::vector<std::string>()
类型。然后,我需要从变体中提取vector<string>
,以便测试其内容。
做这两件事的方便方法是什么?
已启用RTTI。
答案 0 :(得分:0)
您可以使用boost::get
来检查boost::variant
的类型。如果您传入指针,那么如果变体不是您请求的类型,它将返回NULL
。
所以你可以这样做:
ASSERT_TRUE( boost::get< std::vector<std::string> >( &container ) != NULL );
或者,您可以传入引用而不是指针,它将引发bad_get
异常