单元测试boost :: variant类型的对象

时间:2012-10-09 10:31:03

标签: c++ boost

我有一个单元测试,看起来像这样:

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。

1 个答案:

答案 0 :(得分:0)

您可以使用boost::get来检查boost::variant的类型。如果您传入指针,那么如果变体不是您请求的类型,它将返回NULL

所以你可以这样做:

ASSERT_TRUE( boost::get< std::vector<std::string> >( &container ) != NULL );

或者,您可以传入引用而不是指针,它将引发bad_get异常

Documentation is here for more information