我创建了一个类,其中的构造函数中有一些新的运算符。我已经在构造函数中创建了防护,以管理新的运算符失败,但是现在我想对其进行测试。

例如,我有一个像这样的构造函数:

Function::Function()
{
  try
  {
    m_pxArgument = new Argument();
  }
  catch(std::bad_alloc)
  {
    throw MemoryException();
  }
}

是否可以创建一个测试,使我可以告诉新运算符(operator)失败,以测试捕获代码?

最佳答案

如果Argument是您的类/结构-则仅出于UT目的在此类中定义new运算符。

class Argument {
//...
#ifdef UNIT_TEST
   static bool& failNew() { static bool failNew = false; return failNew; }
   void* operator new(size_t size)
   {
       if (!failNew())
         return ::operator new (size);
       failNew() = false;
       throw std::bad_alloc("Argument");
   }
#endif
};

每次需要分配失败时,只需设置Argument::failNew() = true;即可。

关于c++ - 测试新运算符(operator)失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12445729/

10-13 07:05