我正在测试以下代码:
typedef boost::variant<int, std::string> Type;
typedef boost::variant<std::vector<int>, std::vector<std::string> > Container;
class Setter: public boost::static_visitor<>
{
public:
Setter(Container& container): _container(container)
{
}
template <class T>
void operator()(const T& valueToSet)
{
std::vector<T> *container = boost::get< std::vector<T> >(&_container);
if(container->size()==0)
{
container->resize(1);
}
(*container)[0] = valueToSet;
}
private:
Container& _container;
};
使用以下单元测试:
TEST_F (TestSet, addIncorrectTypeToContainer)
{
Container container((std::vector<std::string>()));
Setter setter = Setter(container);
ASSERT_THROW(boost::apply_visitor(setter, Type(int(1))), boost::bad_get);
}
我没有得到 boost::bad_get 异常。相反,它返回 NULL。
我究竟做错了什么?